题目描述:1156.单字符重复子串的最大长度
如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。
给你一个字符串text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。
示例:
代码:
//如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。
//给你一个字符串text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
class Solution {
public:
int maxRepOpt1(string text) {
map<char, int> Count;
int Max = 0;
for (int i = 0; i < text.size(); i++) {
Count[text[i]]++;
}
for (int i = 0; i < text.size(); ) {
int len, j, k;
for (j = i + 1; j < text.size(); j++) {
if (text[i] != text[j])
break;
}
len = j - i;
if (len < Count[text[i]]) {
for (k = j + 1; k < text.size(); k++) {
if (text[i] != text[k])
break;
}
len = min(k - i, Count[text[i]]);
}
//cout << len << endl;
Max = max(len, Max);
i = j;
}
return Max;
}
};
int main() {
string text;
cin >> text;
Solution solution;
cout << solution.maxRepOpt1(text);
return 0;
}
涉及知识点:Map容器、双指针法、滑动窗口法、遍历算法