LeetCode——Longest Repeating Character Replacement

1. Question

Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at most k times. Find the length of a longest substring containing all repeating letters you can get after performing the above operations.

Note:
Both the string's length and k will not exceed 104.

Example 1:

Input:
s = "ABAB", k = 2

Output:
4

Explanation:
Replace the two 'A's with two 'B's or vice versa.
Example 2:

Input:
s = "AABABBA", k = 1

Output:
4

Explanation:
Replace the one 'A' in the middle with 'B' and form "AABBBBA".
The substring "BBBB" has the longest repeating letters, which is 4.

2. Solution

  1. 求一个字符串转变成全部一样字符的字符串所需要的最小步骤数

length of the entire string - number of times of the maximum occurrin character in the string

  1. 最多k次改变的限制,维持一个滑动窗口

(length of substring - number of times of the maximum occurring character in the substring) <= k

3. Code

class Solution {
public:
    int characterReplacement(string s, int k) {
        // sliding window
        int len = s.length();
        vector<int> vec(26, 0);
        int maxValue = 0;
        int start = 0;
        int res = 0;
        for (int end = 0; end < len; end++) {
            vec[s[end] - 'A']++;
            // 表示start~end之间出现次数最多的字符个数
            maxValue = max(maxValue, vec[s[end] - 'A']);
            // 滑动start,一直到满足条件
            while (end - start + 1 - maxValue > k) {
                vec[s[start] - 'A']--;  // 滑掉的需要去掉
                start++;
            }
            res = max(res, end - start + 1);
        }
        return res;
    }
};
posted @ 2017-11-05 11:43  清水汪汪  阅读(200)  评论(0编辑  收藏  举报