חידת LeetCode Solution - Strong Password Checker, פתרון ליטקוד, LeetCode Solution, לפתור שאלות ב LeetCode, מדעי המחשב, תכנות מחשבים, לעבוד בהייטק, ללמוד תכנות מחשבים, להיות מתכנת, ללמוד לתכנת, הכנה לראיון טכני, ראיון עבודה בהייטק, שאלות ליטקוד, פיתוח תוכנה, איך לכתוב קוד? ללמוד לכתוב קוד, חידות היגיון, ללמוד לחשוב, ללמוד לנתח דברים, ללמוד לפרק לגורמים, ללמוד לחלק לחלקים, ללמוד למצוא חוקיות, איך לחלק לחלקים? איך למצוא חוקיות? איך לנתח תהליכים?... 3 פעמים. כל סיסמה שאינה סיסמה חזקה, ניתן לבצע עליה 3 פעולות כדי להפוך אותה לחזקה. ניתן להוסיף לה אותיות, ניתן להסיר ממנה אותיות, וניתן להחליף בה אותיות. דהיינו, ניתן לבצע פעולת הוספה / מחיקה / החלפה. עכשיו השאלה היא כזאת, נותנים לנו סיסמה כלשהי, ואנחנו צריכים ... פחות מ X(אורך מינימלי), אז צריך להוסיף תווים. ואם יש יותר מ Y (אורך מקסימאלי) תווים, אז צריכים למחוק אותיות, כדי לגרום לסיסמה להיות תקינה. ועד כאן בעצם היתה דוגמה לאיך לחלק לחלקים קטנים. עכשיו נעבור לחוק מספר 2 ... וספרה, בעצם אומר ש: עלינו לבדוק האם חסרה אות קטנה / גדולה / מספר, ואז עלינו להוסיף או להחליף אותיות בהתאם לצורך שלנו. לדוגמה 123456 יכול להפוך להיות 123456Aa או יכול להיות 12345Aa או יכול להיות 1234Aa וכולי. ועכשיו ... לבצע וגם לגבי סוג הפעולות שצריכים לבצע, כדי להתאים את הסיסמה לחוק של האורך. עכשיו נבדוק את החוק של האותיות הנדרשות, אם נסתכל נראה כי נניח שאנחנו צריכים שתהיה אות אחת קטנה, הרי שאם אין אות אחת קטנה, הרי ... התקין, מספק לנו הכי הרבה וודאות. אחר כך יש לנו את החוק של התווים ההכרחיים, אחר כך החוק של האותיות הרצופות, שמספק לנו הכי פחות וודאות והכי הרבה ספקות ואפשרויות. אז מה בעצם זה אומר לנו? אז זה בעצם ... של הוספה, גם תיקנו את הסיסמה לאורך של 6 גם הוספנו אות קטנה ומספר, וגם ביטלנו את ה 3 אותיות הרצופות. במילים אחרות, מצב של AAA נפתור אותו ב 3 פעולות. ואם יש לנו סיסמה באורך של 25 אותיות, לדוגמה ABABABAAAAABABABABAB12345. אז בוודאות שאנחנו צריכים לעשות 5 פעולות מחיקה בגלל האורך. + פעולת החלפה או הוספה 1 של אות קטנה. + בגלל שיש בתוך הסיסמה 5 אותיות רצופות של AAAAA אז אנחנו צריכים לעשות או 5 פעולות מחיקה או 2 פעולות הוספה או 1 פעולת החלפה. ... ולא פעולה של הוספה, כדי לא לפגוע באורך + ב 5 הפעולות מחיקה הקודמות, נוכל למחוק את כל רצף האותיות הנל. דהיינו, סהכ נצטרך 6 פעולות בלבד. 5 של מחיקה + 1 של החלפה. אז מהי מהות הפתרון עד ... נפתור את כל שאר הפעולות שאולי צריך לבצע. דהיינו, אם חובה לבצע פעולות מחיקה בגלל האורך, נוכל באמצעותן למחוק אותיות רצופות. אם חובה לבצע פעולות הוספה בגלל האורך, נוכל באמצעות פעולות ההוספה לתקן בהתאם לתווים חסרים או רצופים. כאשר ... יעילה. ולכן קודם כל נבדוק את האורך, ואז נשתמש בפעולת ההוספה כדי לפתור את 2 החוקים הנוספים של להוסיף אותיות חסרות או כדי לנטרל אותיות רצופות. ונשתמש בפעולת המחיקה, כדי לתקן את האורך וגם כדי לפתור אותיות רצופות. ומכאן ואילך, נספור רק פעולות של החלפה בלבד. כדי שלא בטעות נשבש את האורך של הסיסמה וגם כי החלפה יותר יעילה עבור התיקון של אותיות רצופות כנל. אז לכאורה פתרנו את השאלה. אבל האם זאת כל האמת? והתשובה היא שעדיין לא. פתרנו חלקית, אבל ... שהסיסמה היא באורך ארוך מידי, נניח של 30. אז בוודאות שעלינו לבצע 10 פעולות מחיקה. ונניח שיש לנו 10 אותיות רצופות. אז האם 10 פעולות מחיקה, יפתרו את ה 10 אותיות הרצופות? כן. ואם יהיו 12 אותיות רצופות? אז גם כן. ואם יהיו 15 אותיות רצופות? אז 10 מחיקות יביאו אותנו ל 5 אותיות רצופות, שאותן נפתור בעוד פעולת החלפה 1. עד כאן הכל נשמע הגיוני. אבל מה אם נניח שהסיסמה היא באורך של 21 ואנחנו צריכים לבצע מחיקה 1. ונניח שיש לנו בתוך הסיסמה 2 רצפים שונים של אותיות, רצף אחד של 3 אותיות ורצף אחד של 4 אותיות או של 16 אותיות וכולי. מאיזה רצף כדאי לנו לבצע את פעולת המחיקה? האם זה משנה? ואם נניח הסיסמה היא באורך של 22 אותיות ואנחנו צריכים למחוק 2 אותיות, ויש לנו רצף אחד של 3 אותיות ורצף אחד של 5 אותיות, מאיזה רצף כדאי לנו למחוק? האם זה משנה? אז כנראה שכן, ונבדוק: נניח שיש לנו את הסיסמה הבאה באורך ... לנו בוודאות לבצע 2 פעולות מחיקה. אז מה האפשרויות שיש לנו? 1 - למחוק מהרצף של ה bbb שתי אותיות 2 - למחוק מהרצף של AAAAA שתי אותיות 3 - למחוק מהרצף של bbb אות 1 ומהרצף של AAAAA גם כן אות 1. אז מה הכי כדאי לעשות? האם זה משפיע? מה החוקיות? אז נראה, שבאפשרות 1 שנמחק 2 אותיות מהרצף של b הרי שלאחר מכן נצטרך לבצע עוד פעולה 1 של החלפה כדי לנטרל את הרצף של ה 5 אותיות A. ובאפשרות 2 שנמחק 2 אותיות של רצף A, הרי שלאחר מכן נצטרך לבצע 2 פעולות נוספות, כדי לנטרל את הרצף של ה bbb וגם ... לבצעה אחר כך עוד פעולה 1 של החלפה. במילים אחרות, אנחנו צריכים למצוא נוסחה, איך לדעת מאיזה רצף של אותיות למחוק קודם וכמה למחוק. או ניקח לדוגמה את המקרה הבא באורך של 23 כך: 12345AAAAAAbbbbbb111111 הרי שאנחנו צריכים לבצע 3 מחיקות. ומאחר שיש לנו בתוך הסיסמה 3 רצפים של 6 אותיות. אז אנחנו יכולים: או למחוק 3 מרצף כלשהו, או למחוק 2 מרצף כלשהו + 1 מרצף אחר, או למחוק ... ניגשים לזה? אז לשם כך קודם כל ננסה להבין יותר טוב את החוקיות של כמות הפעולות הנדרשת כדי לתקן אותיות רצופות. ואם נחקור נראה שהחוקיות היא כזאת. אם יש לנו X כלשהו גדול מ 2 אותיות, לדוגמה 10 אותיות רצופות, אז: או שעלינו לבצע X-2 פעולות מחיקה, דהיינו, 10-2 פעולות מחיקה, דהיינו, 8 פעולות מחיקה. או שעלינו לבצע ...