424 替換後的最長重複字元

2021-10-18 17:44:53 字數 1612 閱讀 6206

給你乙個僅由大寫英文本母組成的字串,你可以將任意位置上的字元替換成另外的字元,總共可最多替換 k 次。在執行上述操作後,找到包含重複字母的最長子串的長度。

注意:字串長度 和 k 不會超過 104。

示例 1:

輸入:s = 「abab」, k = 2

輸出:4

解釋:用兩個』a』替換為兩個』b』,反之亦然。

示例 2:

輸入:s = 「abaa」, k = 0

輸出:2

左右雙指標思想:

示例:s = aabcabbb,k = 2, 輸出結果為6

從左邊開始:a a b c a b b b ;初始左右指標都在索引0位

右指標移動:

右指標先動,右移乙個,得到長度為1的子串「a」

繼續右移乙個,得到長度為2的子串「aa」

接著右移,得到長度為3的子串「aab」,依然是合法的,因為k值為2,所以得到的子串中可以轉變的字元長度只要小於k值,就可以一直右移;

什麼時候不能右移了?

接著右移,得到長度為4的子串「aabc」

右移,長度為5的子串「aabca」

右移,長度為6的子串「aabcab」,是不合法的,此時需要移動左邊的指標往右移;

左指標移動:

因為長度為6的子串「aabcab」中有3個a,兩個b,乙個c,超過了k值;所以左、右指標往右移

移動一位,得到長度為6的子串「abcabb」,依然不合法;

左指標移動,得到長度為5的子串「bcabb」,合法;

接下來右指標接著挪,得到長度為6的子串「bcabbb」,合法。遍歷完成

def

characterreplacement

(s:str

, k:

int)

->

int:

res =

1 length =

len(s)

if k >= length or length <=1:

return length

# 可以不定義temp,節省空間

temp =

temp_dict = collections.defaultdict(

int)

for i in

range

(length):)

temp_dict[s[i]]+=

1 max_val =

max(temp_dict.values())

# 此處就是左指標挪動的條件

while max_val + k <

len(temp)

: temp_dict[temp[0]

]-=1 temp = temp[1:

] max_val =

max(temp_dict.values())

res =

max(res,

len(temp)

)return res

424 替換後的最長重複字元

給你乙個僅由大寫英文本母組成的字串,你可以將任意位置上的字元替換成另外的字元,總共可最多替換 k 次。在執行上述操作後,找到包含重複字母的最長子串的長度。注意 字串長度 和 k 不會超過 104。示例 1 輸入 s abab k 2 輸出 4 解釋 用兩個 a 替換為兩個 b 反之亦然。示例 2 輸...

424 替換後的最長重複字元

給你乙個僅由大寫英文本母組成的字串,你可以將任意位置上的字元替換成另外的字元,總共可最多替換 k 次。在執行上述操作後,找到包含重複字母的最長子串的長度。注意 字串長度 和 k 不會超過 104。示例 1 輸入 s abab k 2 輸出 4 解釋 用兩個 a 替換為兩個 b 反之亦然。示例 2 輸...

424 替換後的最長重複字元

給你乙個僅由大寫英文本母組成的字串,你可以將任意位置上的字元替換成另外的字元,總共可最多替換 k 次。在執行上述操作後,找到包含重複字母的最長子串的長度。注意 字串長度 和 k 不會超過 10 4。右指標移動並更新資料 判斷是否滿足左指標移動條件 最終以左右指標差為答案 1 陣列 用於記錄字母重複字...