class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算模板串S在文本串T中出现了多少次
* @param S string字符串 模板串
* @param T string字符串 文本串
* @return int整型
*/
int kmp(string S, string T) {
int next[S.length()],sum=0;
next[0]=0;
for(int i=1,j=0; i<S.length(); )
{
if(S[i]==S[j])
next[i++]=++j;
else if(j)
j=next[j-1];
else
next[i++]=0;
}
for(int i=0,j=0; j<T.length(); )
{
if(S[i]==T[j])
{
i++,j++;
if(i==S.length())
{
i=next[i-1];
sum++;
}
}
else if(i)
i=next[i-1];
else
j++;
}
return sum;
}
};KMP算法:算特征数组:abcadabcab
0001012342

京公网安备 11010502036488号