您好,登錄后才能下訂單哦!
LeetCode中怎么替換后的最長重復字符串,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
給你一個僅由大寫英文字母組成的字符串,你可以將任意位置上的字符替換成另外的字符,總共可最多替換 k 次。在執行上述操作后,找到包含重復字母的最長子串的長度。
注意:字符串長度 和 k 不會超過 10^4。
輸入:s = "ABAB", k = 2
輸出:4
解釋:用兩個'A'替換為兩個'B',反之亦然。
輸入:s = "AABABBA", k = 1
輸出:4
解釋:
將中間的一個'A'替換為'B',字符串變為 "AABBBBA"。
子串 "BBBB" 有最長重復字母, 答案為 4
一看到最長字符串就想到滑動窗口。
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
from collections import defaultdict
d = defaultdict(int)
l = 0
maxn = 0
for r in range(len(s)):
d[s[r]] += 1
maxn = max(maxn, d[s[r]])
if r - l + 1 > maxn + k: # bc it is for loop, r += 1 is later than if clause
d[s[l]] -= 1
l += 1
return len(s) - l
class Solution {
public int characterReplacement(String s, int k) {
int len=s.length();
if(len<2){
return len;
}
char[] chararray=s.toCharArray();
int left=0,right=0;
int maxCount=0,res=0;
int[] freq = new int[26];
while(right<len){
freq[chararray[right]-'A']++;
maxCount=Math.max(maxCount,freq[chararray[right]-'A']);
right++;
if(right-left>maxCount+k){
freq[chararray[left]-'A']--;
left++;
}
res=Math.max(res,right-left);
}
return res;
}
}
看完上述內容,你們掌握LeetCode中怎么替換后的最長重復字符串的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。