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))