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.
本题,我采用的是利用两个指针进行遍历;从左至右依次进行寻找最长字符串,但是遇到一个特殊的情况需要注意的是:
input:ABBB
这个时候,我们需要多判断一步,判定我们的K是否用完,如果没用完需要加上,当然最后的长度不应该大于整个字符串的长度:
代码如下:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<string> using namespace std; class Solution { public: int characterReplacement(string s, int k) { char *ps = &s[0], *pe = &s[0]; int num = 0,dis=0,len=0; while (*pe != '\0') { if (*ps == *pe){ ++num; ++pe; if (*pe == '\0'&&dis<k){ num = num + (k - dis); if (num>s.length()) num = s.length(); } } else { dis++; if (dis <= k){ ++num; ++pe; if (*pe == '\0'&&dis<k){ num =num+ (k - dis); if (num>s.length()) num = s.length(); } } else { if (num > len){ len = num; } dis = 0; num = 0; ++ps; pe = ps; } } } if (num > len){ len = num; } return len; } }; int _tmain(int argc, _TCHAR* argv[]) { Solution s; string str = "ABBB"; int num; num=s.characterReplacement(str, 2); cout << num<<endl; system("pause"); return 0; }