领扣LintCode算法问题答案-1819. 最长双交替子串
目录
1819. 最长双交替子串描述样例 1:样例 2:样例 3:
题解鸣谢
1819. 最长双交替子串
描述
给定一个长度为 N 且只包含a和b的字符串 S。你需要找出最长的子串长度,使得其中不包含三个连续的字母。即,找出不包含aaa或bbb的最长子串长度。注意 S 是其本身的子串。
N 的取值范围是[1,200000];字符串S只包含字符 a 和/或 b.
样例 1:
输入: "baaabbabbb"
输出: 7
说明: "aabbabb"是最长符合条件的子串
样例 2:
输入: "babba"
输出: 5
说明:整个S符合条件
样例 3:
输入: "abaaaa"
输出: 4
说明: "abaa"是最长符合条件的子串
题解
public class Solution {
public int longestSemiAlternatingSubstring(String s
) {
if (s
== null
|| s
.length() == 0) {
return 0;
}
int maxCount
= 0;
int startIndex
= 0;
char preC
= s
.charAt(0);
int preCount
= 1;
for (int i
= 1; i
< s
.length(); i
++) {
char c
= s
.charAt(i
);
if (c
== preC
) {
if (preCount
== 2) {
int count
= i
- startIndex
;
if (count
> maxCount
) {
maxCount
= count
;
}
startIndex
= i
- 1;
while (i
+ 1 < s
.length()
&& s
.charAt(i
+ 1) == preC
) {
i
++;
startIndex
++;
}
} else {
preCount
++;
}
} else {
preC
= c
;
preCount
= 1;
}
}
int count
= s
.length() - startIndex
;
if (count
> maxCount
) {
maxCount
= count
;
}
return maxCount
;
}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。