[リートコード] 0076. 最小ウィンドウ部分文字列

Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク


2 つの文字列が与えられた場合 s そして t 長さの メートル そして n それぞれ、戻る の 最小ウィンドウ 部分文字列 の s つまり、 t (重複を含む)がウィンドウに含まれるそのような部分文字列がない場合は、 空の文字列 "".

テストケースは、答えが次のようになるように生成される。 個性的.

 

例 1:

入力: s = "ADOBECODEBANC"、t = "ABC"
出力: 「バンク」
説明: 最小ウィンドウ部分文字列「BANC」には、文字列 t の「A」、「B」、および「C」が含まれます。

例 2:

入力: s = "a"、t = "a"
出力: 「あ」
説明: 文字列 s 全体が最小ウィンドウです。

例 3:

入力: s = "a"、t = "aa"
出力: ""
説明: t の両方の 'a' がウィンドウに含まれている必要があります。s の最大ウィンドウには 'a' が 1 つしかないため、空の文字列を返します。

 

制約:

  • m == s.長さ
  • n == t.長さ
  • 1 <= m、n <= 10 5
  • s そして t 英語の大文字と小文字で構成されます。

 

フォローアップ: 実行できるアルゴリズムを見つけられますか? O(m + n) 時間?

パイソン

				
					#時間計算量: O(len(s) + len(t)) #空間計算量: O(len(s) + len(t)) from collections import Counter, defaultdict class ソリューション: def minWindow(self, s: str, t: str) -> str: reqCount = defaultdict(int) window = defaultdict(int) result = [-1, -1] resultLen = float('inf') current = 0 t内のcharの場合: reqCount[char] + = 1 必要 = len(reqCount) left = 0 右の範囲内(len(s)): char = s[right] reqCount内のcharの場合: window[char] += 1 window[char] == reqCount[char ]: current += 1 while current == required: if (right - left + 1) < resultLen: resultLen = right - left + 1 result = [left, right] leftChar = s[left] if leftChar in window: window[ leftChar] -= 1 if window[leftChar] < reqCount[leftChar]: current -= 1 left += 1 return s[result[0]:result[1] + 1 if resultLen != float('inf') else "" S = "ADOBECODEBANC" T = "ABC" print(Solution().minWindow(S, T))
				
			
ja日本語