Menu
CoddyTech

Decode String

מחרוזת מקודדת מייצגת טקסט שחוזר על עצמו בצורה k[text], כלומר text נכתב k פעמים ברצף. קבוצות יכולות להופיע בתוך קבוצות אחרות, כך ש-2[a3[b]] מייצג את abbbabbb. כתבו פונקציה שמקבלת מחרוזת מקודדת s ומחזירה את המחרוזת המפוענחת.

אותיות שמחוץ לכל הסוגריים נשארות כפי שהן. כל מספר חזרות הוא מספר שלם חיובי שמופיע מיד לפני [ שלו, וספרות אינן מופיעות בשום מקום אחר.

פונקציה

decodeString(s: string) → string
sstring
המחרוזת המקודדת
מחזירהstring
המחרוזת המפוענחת

אילוצים

  • 1 ≤ s.length ≤ 104
  • s מכילה רק אותיות אנגליות קטנות, ספרות, [ ו־].
  • ‏s הוא קידוד תקין: אחרי כל [ מופיע מספר, ויש לו ] תואם, ואף סוגריים אינם ריקים.
  • כל מספר k מקיים 1 ≤ k ≤ 300 ואין לו אפסים מובילים.
  • סוגריים יכולים להיות מקוננים לעומק של 100 רמות לכל היותר.
  • במחרוזת המפוענחת יש לכל היותר 5 × 104 תווים.

דוגמאות

קלט
s = "2[ab]3[c]x"
פלט
"ababcccx"
הסבר
2[ab] נותן abab ו-3[c] נותן ccc. ה-x נמצא מחוץ לכל סוגריים, ולכן הוא מועתק כפי שהוא, מה שנותן ababcccx.

lock icon+22 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

המחרוזת שפוענחה יכולה להיות ארוכה בהרבה מהקלט. איך תחזיר רק את התו במיקום i במחרוזת שפוענחה, בלי לבנות אותה, כאשר אורך המחרוזת שפוענחה יכול להגיע ל־10^18?

איפוס הקוד
def decodeString(s):
    # כתבו כאן קוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

s = "2[ab]3[c]x"

צפוי

"ababcccx"