//又写了一下 kmp 参考以前的把它搞出来了 一个模式串next数组 一个遍历串 模式跳转 next[0]已经知道 从1开始 不等于 》0 && == 加加
class Solution {
public:
void make_next(string parttern,int *next)
{
int q =0;
next[0] = 0;
for(int i=1 ; i<parttern.length();i++)//得到next
{
while(q>0 && (parttern[q] != parttern[i])) //不相等或者到next[0]了
{
q = next[q-1];
}
if(parttern[q] == parttern[i]) //如果相等
{
q++;
}
next[i] = q;
}
}
int strStr(string haystack, string needle) {
int len = needle.length();
if(len == 0 ) return 0;
int next1[len+1];
make_next(needle,next1);
int k = 0;
for(int i=0;i<haystack.length();i++) //开始遍历要查找的串
{
while((needle[k] != haystack[i]) && (k>0) )
{
k = next1[k-1];
}
if(needle[k] == haystack[i])
{
k++;
}
if( k == needle.length())
{
return i - k+1;
}
}
return -1;
}
};
52 - 算法 - LeetCode 28 - 实现 strStr() -kmp
最新推荐文章于 2022-09-27 22:42:49 发布