这是对的:
inline void kmp (string s1 , string s2)
{
getnxt (s2);
int i = 0 , j = 0;
while (i < (int)s1.size () && j < (int)s2.size ())
{
if (j == (int)s2.size () - 1 && s1[i] == s2[j])
cout << i - j + 1 << "\n" , j = nxt[j];
else if (j == -1 || s1[i] == s2[j])
i ++ , j ++;
else j = nxt[j];
}
}
这个就错了:
inline void kmp (string s1 , string s2)
{
getnxt (s2);
int i = 0 , j = 0;
while (i < s1.size () && j < s2.size ())
{
if (j == s2.size () - 1 && s1[i] == s2[j])
cout << i - j + 1 << "\n" , j = nxt[j];
else if (j == -1 || s1[i] == s2[j])
i ++ , j ++;
else j = nxt[j];
}
}