424. 替換后的最長重復(fù)字符 | 滑動窗口題型

分析:這題求的是重復(fù)字符的最長連續(xù)子串。我們先將題目拆解成兩個部分:
當(dāng)k=0時,求重復(fù)字符的最長連續(xù)子串
當(dāng)0<k<10^4時,替換窗口中k個字符,使子串保持連續(xù)重復(fù)
當(dāng)k=0時,這題可轉(zhuǎn)化為簡單的求重復(fù)字符的最長連續(xù)子串,窗口的長度就是我們需要求出來的答案。針對這一問題,我們可以將窗口問題轉(zhuǎn)化為兩個判斷依據(jù):
當(dāng)右指針指向的字符與當(dāng)前窗口內(nèi)的子串字符相同時,向右擴充窗口(將右指針字符添加進窗口,窗口大小+1)
否則,向右平移窗口(移除窗口最左邊字符,左指針+1,窗口大小不變)

? 具體的實現(xiàn)中,當(dāng)right指向的字符是非重復(fù)字符時,我們可以直接將窗口移動到當(dāng)前字符right這個位置,然后重新開始計算字符長度。
? 要注意理解,滑動窗口題型中的哈希表存儲的信息,我們知道滑動窗口的本質(zhì)是動態(tài)規(guī)劃思想,也就是使用額外的空間存儲重復(fù)的信息,利用空間換時間的方式來降低時間復(fù)雜度,因此哈希表存儲的信息十分關(guān)鍵。
? 在這個問題中,哈希表里存儲的是當(dāng)前窗口中重復(fù)字符的個數(shù)。

??當(dāng) 0<k<10^4?時,我們可以通過將窗口中的k個字符進行替換,來使窗口中的子串均為重復(fù)字符。
??因此判斷條件變成了:如果當(dāng)前窗口中出現(xiàn)次數(shù)最多的字符個數(shù)+K大于當(dāng)前子串長度,意味著子串還可以增加,因此進行窗口擴充操作(left不變,right++);反之,將窗口向右平移(left++,right++,并將left對應(yīng)的字符移除)。


? 另一和424相似的題,這一題僅僅只是把任意字符換成了 0,1數(shù)字,其他條件不變。
? 我們只需要將計算窗口中的數(shù)量最多的字符換成計算窗口中的1的數(shù)量即可。

