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)