滑動視窗3.替換後最長重複字元子串
給一個全部是大寫字母的字串,可以替換k次,求替換k次之後字串中最長的重複子串的長度。
首先這個題是連續子串,用滑動視窗法,且是求最長字串,所以先移動end,當移動到不符合要求時,可以左右一起推進一格(因為此時即使是start先移動,也不可能有比之前更好的答案,最多就是持平,所以乾脆全都移動一次)
怎麼判斷是否符合條件,也就是看視窗中最多的重複字元有幾個,再加上k就是可以出現的最長字串,可以用一個雜湊表來記錄視窗中最多的字串,如果用HahMap的話,就可以用A到Z來表示各個key,value是出現次數,選擇其中最多的一個。其實可以用一個陣列,如果此時字元是c,則c-‘A’就是它在字元陣列中的位置,將該位置加1即可。
沒必要在一個while迴圈中再套一個while迴圈讓所有符合要求的right都移動完,這樣寫起來很麻煩,就簡簡單單每次進來都先處理上次加過的end,然後再判斷是否不符合要求,不符合則移動左邊,最後更新max。
class Solution {
public int characterReplacement(String s, int k) {
if(s==null || s.length()==0)return 0;
if(k>s.length())return s.length();
int max=0;
int end=0;
int start=0;
int winMax=0;//當前視窗最大值
int[] win=new int[26];
while(end<s.length()){
int index=s.charAt(end)-'A';
win[index]++;
winMax=Math.max(winMax,win[index]);
if(end-start+1>winMax+k){
win[s.charAt(start)-'A']--;
start++;
}
max=Math.max(max,end-start+1);
end++;
}
return max;
}
}
相關文章
- 用滑動視窗來解決最長無重複子串問題
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- 3. 無重複字元的最長子串字元
- Leetcode 3. 無重複字元的最長子串LeetCode字元
- 【LeetCode】424. 替換後的最長重複字元LeetCode字元
- 每日leetcode——3. 無重複字元的最長子串LeetCode字元
- leetcode 解題 3. 無重複字元的最長子串-python3@ 官方,暴力解法和視窗滑動解法LeetCode字元Python
- 滑動視窗法——子串相關問題
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- 無重複字元的最長子串字元
- Leetcode 3.無重複字元的最長子串 字典記錄每個字元最後出現的位置LeetCode字元
- java無重複字元的最長子串Java字元
- 3 無重複字元的最長子串字元
- SPOJ 687. Repeats(字尾陣列求最長重複子串)陣列
- Leetcode[字串] 3. 無重複字元的最長子串 10行極簡寫法!LeetCode字串字元
- Sentinel 原理-滑動視窗
- 細聊滑動視窗
- POJ 3693 Maximum repetition substring(字尾陣列求最長重複子串)陣列
- 【演算法框架套路】滑動視窗演算法:匹配子串演算法框架
- 求字串中不含重複字元的最長子串字串字元
- LeetCode——無重複字元的最長子串LeetCode字元
- 演算法-無重複字元的最長子串演算法字元
- 【每日一題】無重複字元的最長子串每日一題字元
- 滑動視窗演算法演算法
- POJ 1743 Musical Theme (字尾陣列,求最長不重疊重複子串)陣列
- 【Leetcode】3. Longest Substring Without RepeatingCharacters無重最長子串LeetCodeGC
- leetcode 之無重複字元的最長子串LeetCode字元
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- TCP 流量控制-滑動視窗TCP
- 滑動視窗演算法思路演算法
- Sentinel滑動視窗演算法演算法
- 滑動視窗分析SQL實踐SQL
- 滑動視窗問題總結
- 滑動視窗與雙指標指標
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- leetcode-3無重複字元的最長子串LeetCode字元
- LeetCode-3. 無重複字元的最長子串LeetCode字元