至少有 K 個重複字元的最長子串

2021-10-20 13:05:32 字數 925 閱讀 8794

原題指路

至少有 k 個重複字元的最長子串

給你乙個字串s和乙個整數k,請你找出s中的最長子串, 要求該子串中的每一字元出現次數都不少於k。返回這一子串的長度。

這道題有別於一般的「滑動視窗」的題目,因為這道題視窗的維護條件需要人為新增一項,即視窗中的字元種類數。

雖然這看起來很複雜,但是由於這題的資料範圍限制在小寫字母集之內,所以可以直接列舉1-26種字母即可。

移動邊界時視窗需維護的變數有:

時間複雜度:o(n

⋅∣σ∣

+∣σ∣

2)o(n \cdot |\sigma| + |\sigma|^2)

o(n⋅∣σ

∣+∣σ

∣2)空間複雜度:o(∣

σ∣)o(|\sigma|)

o(∣σ∣)

∣ σ∣

=26|\sigma|=26

∣σ∣=26

是字母的個數。

class

solution

if(cnt[s[r]

-'a'

]== k)

//該字母出現次數k次

less--

;while

(tot > t)

l++;}

if(!less)

//視窗內字串滿足題設

ret =

max(ret, r - l +1)

;}}return ret;}}

;

395 至少有 K 個重複字元的最長子串

給你乙個字串 s 和乙個整數 k 請你找出 s 中的最長子串,要求該子串中的每一字元出現次數都不少於 k 返回這一子串的長度。示例 1 輸入 s aaabb k 3 輸出 3 解釋 最長子串為 aaa 其中 a 重複了 3 次。示例 2 輸入 s ababbc k 2 輸出 5 解釋 最長子串為 a...

395 至少有K個重複字元的最長子串

殘疾人 訓練 題目 給你乙個字串s和乙個整數k,請你找出s中的最長子串,要求該子串中的每一字元出現次數都不少於k。返回這一子串的長度。最開始的時候一頭霧水 因為我是殘疾人 求子串的問題,在我看來,最難的地方就是時間複雜度 因為隨著字串長度的增加,全部字串的數量是呈指數級別上公升的,因此所有基於列舉所...

395 至少有 K 個重複字元的最長子串 分治

給你乙個字串 s 和乙個整數 k 請你找出 s 中的最長子串,要求該子串中的每一字元出現次數都不少於 k 返回這一子串的長度。示例 1 輸入 s aaabb k 3 輸出 3 解釋 最長子串為 aaa 其中 a 重複了 3 次。class solution if n 0 n k vector has...