代码随想录10——字符串:459.重复的子字符串、字符串总结、双指针总结

文章目录

  • 1.459重复的子字符串
    • 1.1.题目
    • 1.2.解答
  • 2.字符串总结
  • 3.双指针总结

1.459重复的子字符串

参考:代码随想录 459重复的子字符串

1.1.题目

代码随想录10——字符串:459.重复的子字符串、字符串总结、双指针总结_第1张图片

1.2.解答

看代码随想录的题解,但是还是没有特别明白,感觉是那么个意思,但是就是没有弄得特别明白。两种解法只看了KMP解法,先这样吧,回头再看。。。

class Solution
{
public:
    bool repeatedSubstringPattern(string s)
    {
        int len = s.size();
        if(len == 0)
            return false;

        int next[s.size()];
        getNext(next, s);
        int max = next[len - 1];   // 最长相等前后缀的长度
        // 注意最长相等前后坠的长度不能是0
        if(max != 0 && len % (len - max) == 0)
            return true;
            
        return false;
    }

private:
    void getNext(int* next, const string& s)
    {
        // 1.初始化next数组
        int j = 0;
        next[0] = 0;

        // 遍历后缀的位置
        for(int i = 1; i < s.size(); i++)
        {
            // 2.前后缀不相等,回退
            while(j > 0 && s[j] != s[i])
                j = next[j-1];  
            
            // 3.前后缀相等,j++表示i的位置的最长相等前后缀长度+1
            if(s[j] == s[i])
                j++;
            
            // 4.把i位置的最长想等前后缀赋值成j
            next[i] = j;
        }
    }
};

2.字符串总结

参考:代码随想录,字符串总结

没有具体的题目,就是总结。

3.双指针总结

参考:代码随想录,双指针总结

没有具体的题目,就是总结。

你可能感兴趣的:(算法刷题,算法,c++,数据结构)