自学内容网 自学内容网

2730、找到最长的半重复子字符穿

题目:

解答:

窗口为[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)


原文地址:https://blog.csdn.net/qq_56272102/article/details/149123924

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!