您好,登錄后才能下訂單哦!
這篇文章主要介紹了leetcode如何求替換后的最長重復字符,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
給你一個僅由大寫英文字母組成的字符串,你可以將任意位置上的字符替換成另外的字符,總共可最多替換 k 次。在執行上述操作后,找到包含重復字母的最長子串的長度。
注意:
字符串長度 和 k 不會超過 104。
示例 1:
輸入:
s = "ABAB", k = 2
輸出:
4
解釋:
用兩個'A'替換為兩個'B',反之亦然。
示例 2:
輸入:
s = "AABABBA", k = 1
輸出:
4
解釋:
將中間的一個'A'替換為'B',字符串變為 "AABBBBA"。
子串 "BBBB" 有最長重復字母, 答案為 4。
解題思路
1,滑動窗口類題目一般都需要左右兩個指針,重點放在理解和優化窗口移動的邏輯
2,注意本題是提換K個字符而不是替換K種
3,顯然最大長度=窗口內出現次數最多的字符的次數+K
4,每次移動右指針,更新最大出現次數
5,如果右指針到左指針長度>K+最大出現次數則,移動左指針
func characterReplacement(s string, k int) int {
win:=make(map[byte]int)
start:=0
max:=0
maxSame:=0
for end:=0;end<len(s);end++{
win[s[end]]++
if win[s[end]]>maxSame{
maxSame=win[s[end]]
}
for end-start+1-maxSame>k{
win[s[start]]--
start++
}
fmt.Println("*",start,end,maxSame)
if end-start+1>max{
max=end-start+1
}
}
return max
}
感謝你能夠認真閱讀完這篇文章,希望小編分享的“leetcode如何求替換后的最長重復字符”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。