2730. 找到最长的半重复子字符串
思路:滑动窗口,计算滑动窗口里“相邻字符相等的数量”,当数量大于1时,移动滑动窗口的左边界f,直到数量不超过1。细节看注释
class Solution {
public:
int longestSemiRepetitiveSubstring(string s) {
//滑动窗口的左边界f
int f=0;
//最大长度
int mx=1;
//相邻字符相等的数量
int ct=0;
for(int i=1;i<s.size();i++){
if(s[i]==s[i-1]) ct++;
while(ct>=2&&f<i){
if(s[f]==s[f+1]) ct--;
f++;
}
mx=max(mx,i-f+1);
}
return mx;
}
};