Menu
CoddyTech

Minimum Window Substring

2つの文字列、sとtが与えられます。繰り返しも考慮して、tのすべての文字を含むsの最短部分文字列を見つけてください。たとえば、tに同じ文字が2回含まれている場合、部分文字列にもその文字が少なくとも2回含まれていなければなりません。文字の順序は問いません。また、ほかの文字が含まれていてもかまいません。

最短の部分文字列が複数ある場合は、最も左にあるものを返してください。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 で、5文字です。plan は4文字ですべてを含み、3文字の並びではどれも含みません。
challenge icon

発展問題

tの文字数が少なく、sが長い場合、sのほとんどは関係ありません。ウィンドウがtの文字がある位置の間だけを移動するようにできますか?

コードをリセット
def minWindow(s, t):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

s = "mappingtheplan"
t = "nap"

期待される出力

"plan"