1156. 单字符重复子串的最大长度
这道题测试用例都比较简单,用暴力也可以过。
遍历text
字符串,假设当前遍历下标为i
,我们匹配text[i]
这个字符,向右遍历找到第一个不是text[i]
的字符b
,看b
的左右两侧连续为text[i]
的字符有多少个,k
为b
右侧底第二个不为text[i]
的字符下标,之后再从i
左边和k
右边去找有没有text[i]
相同的字母来替换b,有的话res = max(res, leftnum + rightnum + 1);
int maxRepOpt1(string text) {
int size = text.size(), res = 1;
for (int i = 0; i < size; i++) {
int left_num = 1, right_num = 0, j = 0, k = 0;
for (j = i + 1; j < size; j++) {
if (text[j] == text[i]) left_num++;
else break; // 第一次遇到和text[i]不同的字符
}
for(k = j + 1; k < size; k++) {
if (text[k] == text[i]) right_num++;
else break; // 第二次遇到和text[i]不同的字符
}
for (int a = i - 1; a >= 0; a--) {
if (text[a] == text[i]) {
res = max(res, left_num + right_num + 1);
break;
}
}
for (int a = k + 1; a < size; a++) {
if (text[a] == text[i]) {
res = max(res, left_num + right_num + 1);
break;
}
}
}
return res;
}