Menu
CoddyTech

Minimum Window Substring

נתונות לך שתי מחרוזות, s ו־t. מצאו את תת־המחרוזת הקצרה ביותר של s, רצף של תווים עוקבים, שמכילה כל תו של t, תוך התחשבות בחזרות: אם t מכילה אות פעמיים, תת־המחרוזת חייבת להכיל אותה לפחות פעמיים. הסדר אינו חשוב, ותת־המחרוזת יכולה להכיל גם תווים אחרים.

אם כמה תת־מחרוזות חולקות את האורך הקצר ביותר, החזירו את זו שמופיעה הכי שמאלה. אם אין תת־מחרוזת של s שמכילה את כל התווים של t, החזירו מחרוזת ריקה.

פונקציה

minWindow(s: string, t: string) → string
sstring
המחרוזת שבה יש לחפש
tstring
התווים שהחלון חייב להכיל, כולל חזרות
מחזירהstring
תת־המחרוזת הקצרה ביותר, ובמקרה של שוויון השמאלית ביותר, של s שמכילה את כל t, או מחרוזת ריקה

אילוצים

  • 1 ≤ s.length ≤ 5 × 104
  • 1 ≤ t.length ≤ 104
  • s ו-t מכילים רק אותיות באנגלית. אותיות גדולות ואותיות קטנות הן תווים שונים.
  • כאשר כמה תתי־מחרוזות הן הקצרות ביותר, התשובה היא זו שמופיעה ראשונה; כשאין אף אחת, התשובה היא "".

דוגמאות

קלט
s = "mappingtheplan"t = "nap"
פלט
"plan"
הסבר
כשקוראים משמאל, החלון הראשון שמכיל n, את a ואת p הוא appin, שאורכו חמישה תווים. plan שבסוף מכיל את שלושתם בארבעה תווים, ואף רצף של שלושה תווים אינו מכיל את כולם.

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

challenge icon

שאלת המשך

כאשר t מורכב ממספר קטן של אותיות ו-s ארוך, רוב s לא יכולים להשפיע. האם אפשר לגרום לחלון לדלג רק בין המיקומים שבהם מופיעה אות של t?

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

מקרה 1

מקרה 2

מקרה 3

קלט

s = "mappingtheplan"
t = "nap"

צפוי

"plan"