题目:
解答:
窗口为[left,right],ans为窗口长度,same为子串长度,窗口满足题设条件,即只含一个连续重复字符,则更新ans,否则从左边开始一直弹出,直到满足条件。
same记录窗口内出现的重复字符串个数。same<2时满足条件。
class Solution {
public:int longestSemiRepetitiveSubstring(string s) {int len = s.size();if(len == 1) return 1;int left = 0 ,right = 1;int ans= 0;int same = 0;for(right;right<len;right++){if(s[right]==s[right-1])same++;if(same==2){left++;while(s[left-1]!=s[left]){left++;}same--;}ans=max(ans,right-left+1);}return ans;}
};
时间复杂度O(n)
空间复杂度O(1)