題目:
解答:
窗口為[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)