424 替換後的最長重複字元

2021-10-18 19:38:02 字數 1176 閱讀 4543

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

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

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

輸出:4

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

輸入:s = 「aababba」, k = 1

輸出:4

解釋:將中間的乙個』a』替換為』b』,字串變為 「aabbbba」。

子串 「bbbb」 有最長重複字母, 答案為 4

突然發現涉及到查詢子串,不可避免的要遍歷所有情況,但可以用乙個容器記錄狀態,避免重複的比較。涉及到比較,並且出現大小關係的情況下就想辦法跳過一些情況提高效率。

子串允許出現的最長長度 = 出現次數最多的字元的出現次數 + k

class

solution

:def

characterreplacement

(self, s:

str, k:

int)

->

int:

# 子串頭尾

head, tail =0,

0# 當前子串長度

length =

0# 最長子串長度

max_length =

0# 字元:字元數量

stat =

# 當前子串出現字元中最多的字元數量

max_num =

0for tail in s:

num = stat.get(tail,0)

+1stat[tail]

= num

length +=

1if num > max_num:

max_num = num

if length - max_num > k:

stat[s[head]]-=

1 head +=

1 length -=

1if length > max_length:

max_length = length

return max_length

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 不會超過 104。示例 1 輸入 s abab k 2 輸出 4 解釋 用兩個 a 替換為兩個 b 反之亦然。示例 2 輸...