代码随想录第九天|28. 实现 strStr() 、459.重复的子字符串

28. 实现 strStr() 

思路:

暴力破解,双指针查找被匹配的字符串,用另一个指针对应匹配的字符串

看视频:

kmp算法,KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。

前缀表:记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。

分成三步

1.初始化

2.处理前后缀不相同的情况

3.处理前后缀相同的情况

    void getNext(int *next, const string &s)

    {

        int j=0;

        next[0]=0;

        for(int i=1; i<s.size(); i++)

        {

            while(j>0 && s[i]!=s[j])

                j=next[j-1];

            if(s[i]==s[j])

                j++;

            next[i]=j;

        }

    }


459.重复的子字符串

思路:

知道可以用kmp算法实现,但不清楚最后的判定条件。

看视频后:

如果字符串由重复的子字符串构成,则最长相等前后缀不包含的子串就是最小重复子串。

判别条件:

if(next[length-1]!=0&&length%(length-next[s.size()-1])==0)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容