一看到最长字串长度一般都是用双指针或者滑动窗口。本题可以转换下思路,既然滑动窗口中的字符可以被替换k次,那么只要滑动窗口中的除了出现组多的那个字符外的其他字符出现的次数少于K那么窗口就可以扩大。如果大于K,那么证明
// 可以转换下思路,在一个滑动窗口内,除了出现次数最多的那个外的其他字符的出现次数小于等于k,那么窗口就可以扩大 int characterReplacement(char * s, int k){ int len = strlen(s); int left = 0; int right = 0; int maxAlpha = 0; int alpha[26] = {0}; memset(alpha, 0, sizeof(int) * 26); while (right < len) { alpha[s[right]-'A']++; maxAlpha = maxAlpha > alpha[s[right]-'A'] ? maxAlpha : alpha[s[right]-'A']; if (right - left + 1 - maxAlpha > k) { // 窗口内除了出现次数最多的那个其他字符出现次数大于k,则不能替换了 alpha[s[left]-'A']--; left++; } right++; } return right - left; }