給你乙個僅由大寫英文本母組成的字串,你可以將任意位置上的字元替換成另外的字元,總共可最多替換 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 陣列 用於記錄字母重複字...