LeetCode 424. 替换后的最长重复字符

424. 替换后的最长重复字符

解题思路:

采用双指针(尺取)法。首先用一个数组cnt记录区间[l,r]内每个字符出现的次数。该区间所有字符出现的次数sum = r - l + 1,我们找出这个区间字符出现的最大次数max_cnt,那么sum - max_cnt就是这个区间内我们可以替换字符的最小次数,如果sum - max_cnt <= k说明该区间满足条件,我们更新区间长度的最大值。如果sum - max_cnt > k 说明不满足条件,我们通过移动指针l来找到满足条件的区间。

代码:

class Solution {
public:
    int characterReplacement(string s, int k) {
      int len = s.size(), ans = 0;
      int r = 0, l = 0, max_cnt = 0;
      vector<int> cnt(26, 0);
      while(r < len) {
        int cur = s[r] - 'A';
        ++cnt[cur];
        max_cnt = max(max_cnt, cnt[cur]);
        while (r - l + 1 - max_cnt > k) {
          int del = s[l] - 'A';
          --cnt[del];
          l++;
        }
        ans = max(ans, r - l + 1);
        r++;
      }
      return ans;
    }
};

posted on 2022-04-05 14:47  翔鸽  阅读(45)  评论(0编辑  收藏  举报