חידת LeetCode Solution - Strong Password Checker, פתרון ליטקוד, LeetCode Solution, לפתור שאלות ב LeetCode, מדעי המחשב, תכנות מחשבים, לעבוד בהייטק, ללמוד תכנות מחשבים, להיות מתכנת, ללמוד לתכנת, הכנה לראיון טכני, ראיון עבודה בהייטק, שאלות ליטקוד, פיתוח תוכנה, איך לכתוב קוד? ללמוד לכתוב קוד, חידות היגיון, ללמוד לחשוב, ללמוד לנתח דברים, ללמוד לפרק לגורמים, ללמוד לחלק לחלקים, ללמוד למצוא חוקיות, איך לחלק לחלקים? איך למצוא חוקיות? איך לנתח תהליכים?... אורך הסיסמה קטן מ 6 תווים, אז צריך להוסיף תווים. ואם אורך הסיסמה גדול מ 20 תווים, אז צריכים למחוק תווים. אבל מאחר שחשוב לנו ללמוד לחלק לחלקים, אז אומר בצורה ברורה, כי מצד האמת, אפשרי לנסח את השאלה ... שעלינו לבדוק את אורך הסיסמה (=N) ואם אורך הסיסמה גדול מ X (אורך מקסימאלי) תווים, הרי שזה אומר שעלינו למחוק N-X תווים, כדי שהסיסמה תהיה תקינה. לדוגמה אם אורך הסיסמה הוא 33 דהיינו, אורך שגדול מ X=20, אז 33-20 = 13 ולכן נצטרך למחוק 13 תווים כדי לגרום לסיסמה להיות תקינה. דהיינו, נצטרך לעשות 13 פעולות של מחיקה כדי לגרום לסיסמה להיות תקינה ... יש פחות מ X(אורך מינימלי), אז צריך להוסיף תווים. ואם יש יותר מ Y (אורך מקסימאלי) תווים, אז צריכים למחוק אותיות, כדי לגרום לסיסמה להיות תקינה. ועד כאן בעצם היתה דוגמה לאיך לחלק לחלקים קטנים. עכשיו נעבור לחוק מספר ... לפתור מקרה לדוגמה שאסור שיהיה תו ספציפי רצוף, לדוגמה AAA? והתשובה היא, שאם לדוגמה יש לנו AAA עלינו או למחוק A אחד וישאר רק AA או להחליף תו אחד לדוגמה A1A או 1AA או AA1 ועכשיו הסיסמה תהיה תקינה. ... A1AA או AA1A, שגם כך הסיסמה הופכת להיות תקינה. ואם יש לנו 4 תווים רצופים, לדוגמה AAAA עלינו או למחוק 2 תווים ונקבל AA. או להוסיף תו אחד לדוגמה AA1AA או להחליף תו אחד לדוגמה A1AA או AA1A ואז הסיסמה תהיה תקינה. ואם יש לנו 5 תווים רצופים, לדוגמה AAAAA עלינו או למחוק 3 תווים, ונקבל AA או להוסיף 2 תווים לדוגמה AA1AA2A או להחליף תו אחד דהיינו, AA1AA וככה הסיסמה תהיה תקינה. ואם יש לנו 6 תווים רצופים, לדוגמה AAAAAA אז עלינו או למחוק 4 או להוסיף 2 ל AA1AA2AA או להחליף 2 כך AA2AA1 וכיוב. ואם יש לנו 7 לדוגמה AAAAAAA אז עלינו או למחוק 5 או להוסיף 3 כך: AA2AA3AA1A או להחליף 2 כך: AA1AA2A. ואם יש לנו 8 לדוגמה AAAAAAAA אז עלינו או למחוק 6 או להוסיף 3 כך: AA2AA3AA1AA או להחליף 2 כך: AA1AA2AA וכך עלינו להמשיך ולבדוק ידנית עוד מקרים, מבחינתי ... כדי להוסיף אות קטנה ולא פעולה של הוספה, כדי לא לפגוע באורך + ב 5 הפעולות מחיקה הקודמות, נוכל למחוק את כל רצף האותיות הנל. דהיינו, סהכ נצטרך 6 פעולות בלבד. 5 של מחיקה + 1 של החלפה. אז ... ובאמצעותן נפתור את כל שאר הפעולות שאולי צריך לבצע. דהיינו, אם חובה לבצע פעולות מחיקה בגלל האורך, נוכל באמצעותן למחוק אותיות רצופות. אם חובה לבצע פעולות הוספה בגלל האורך, נוכל באמצעות פעולות ההוספה לתקן בהתאם לתווים חסרים או רצופים. ... כדאי לנו לבצע את פעולת המחיקה? האם זה משנה? ואם נניח הסיסמה היא באורך של 22 אותיות ואנחנו צריכים למחוק 2 אותיות, ויש לנו רצף אחד של 3 אותיות ורצף אחד של 5 אותיות, מאיזה רצף כדאי לנו למחוק? האם זה משנה? אז כנראה שכן, ונבדוק: נניח שיש לנו את הסיסמה הבאה באורך של 22 כך: AAAAAbbb12345678901234 ויש לנו בוודאות לבצע 2 פעולות מחיקה. אז מה האפשרויות שיש לנו? 1 - למחוק מהרצף של ה bbb שתי אותיות 2 - למחוק מהרצף של AAAAA שתי אותיות 3 - למחוק מהרצף של bbb אות 1 ומהרצף של AAAAA גם כן אות 1. אז מה הכי כדאי לעשות? האם זה ... אחר כך עוד פעולה 1 של החלפה. במילים אחרות, אנחנו צריכים למצוא נוסחה, איך לדעת מאיזה רצף של אותיות למחוק קודם וכמה למחוק. או ניקח לדוגמה את המקרה הבא באורך של 23 כך: 12345AAAAAAbbbbbb111111 הרי שאנחנו צריכים לבצע 3 מחיקות. ומאחר שיש לנו בתוך הסיסמה 3 רצפים של 6 אותיות. אז אנחנו יכולים: או למחוק 3 מרצף כלשהו, או למחוק 2 מרצף כלשהו + 1 מרצף אחר, או למחוק 1 מכל אחד מהרצפים. אם נמחק 3 מהרצף הראשון, הרי שנישאר עם 3 רצפים של 3+6+6 ונצטרך לעשות עוד ... 5, דהיינו, 5 פעולות החלפה וכולי. ומכאן נחזור לשאול את עצמנו, איזו פעולת מחיקה הכי יעילה? היכן הכי כדאי למחוק? והתשובה תהיה, היכן שפעולת המחיקה חוסכת הכי הרבה פעולות החלפה. דהיינו, אם נחקור בצורה ידנית את כל הרצפים מ ... במילים אחרות, אם יש לנו X פעולות מחיקה אפשריות, לדוגמה נניח של פעולת מחיקה 1, הרי שנעדיף קודם כל למחוק מרצפים באורך של כפולות של 3 דהיינו, של 3/6/9/12/15/18. כי רק בהם המחיקה חוסכת פעולה של החלפה. אבל ברצפים ... של תו 1, לא תביא תועלת כלשהי. ואם יש לנו אפשרות לבצע 2 פעולות מחיקה, אז קודם כל נתעדף למחוק תו 1 מרצפים של כפולות של 3 (3/6/9/12/15/18) ורק אחר כך נעבור למחוק מרצפים של כפולות של 3 בתוספת 1 או בתוספת של 2. למרות שלא נקבל בפעולת המחיקה השניה שום תועלת. ...