Menu
CoddyTech

Minimum Window Substring

2つの文字列 s と t が与えられます。t のすべての文字を含む s の最短部分文字列(連続する文字の並び)を見つけてください。文字の重複も数えます。つまり、t に同じ文字が2回含まれている場合、部分文字列にもその文字が少なくとも2回含まれている必要があります。文字の順序は問いません。また、部分文字列にほかの文字が含まれていてもかまいません。

複数の部分文字列の長さが同じ最短である場合は、最も左にあるものを返してください。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で、5文字の長さです。末尾のplanは4文字ですべてを含み、3文字の連続した部分にはそのようなものはありません。

lock icon提出時に隠しテスト+17件

challenge icon

発展問題

t が使う文字がわずかで s が長い場合、s の大部分は関係しません。t の文字を含む位置の間だけをウィンドウが飛び移るようにできますか?

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

ケース1

ケース2

ケース3

入力

s = "mappingtheplan"
t = "nap"

期待値

"plan"