在Carl那学的KMP算法
class Solution {
public:
int kmp(string S, string T) {
int ans = 0;
int next[S.size()];
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;
}
j = 0;
for(int i = 0;i < T.size();i++)
{
while(j > 0 && T[i] != S[j])
j = next[j - 1];
if(T[i] == S[j])
j++;
if(j == S.size())
{
ans++;
j = next[j - 1];
}
}
return ans;
}
};
京公网安备 11010502036488号