首页 > 其他 > 详细

双指针

时间:2021-02-02 23:35:57      阅读:38      评论:0      收藏:0      [点我收藏+]

LeetCode 424 Longest Repeating Character Replacement

思路

暴力解法

  • 遍历字符串的所有子串,对每个子串检查是否满足条件:找到该子串出现次数最多的字符,剩下字符的数量小于k,如果满足记录子串长度。O^3
  • 找到满足条件子串中最长的。

双指针

原因

  1. 子串[i, j]的左i不变,满足条件的j最大的时候 => 不需要去遍历更大的j了(剪枝?),此时可以去变化i了、
  2. 那如果对每个i,都找到一个满足条件的最大j,记录此时的[i, j]
  3. 复杂度O^2
  4. 更高效的:当找到一个i定点,j最大的时候,将i,j各加一(滑动窗口),即向右移动一格,之后如果j能更大则j++(滑动窗口变大),直至滑到最后。O(n)

代码

int f(string s, int k) {
    vector<int> num(26, 0);
    int left = 0;
    int right = 0;
    int maxCharacterNum = 0;
    while (right < s.length()) {
        num[s[right] - ‘A‘]++;
        maxCharacterNum = max(maxCharacterNum, num[s[right] - ‘A‘]);
        if (right - left + 1 - maxCharacterNum > k) {
            num[s[left++] - ‘A‘]--;
        }
        right++;
    }
    return right - left;
}

双指针

原文:https://www.cnblogs.com/wy1102808691/p/14364561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!