KMP java
private static void getnext(String p, int [] next)
{
for(int i =0;i<p.length();i++)
{
next[i]=0;
while(next[i]<i-1 && p.charAt(next[i])==p.charAt(i-1-next[i]))
next[i]++;
}
}
private static int kmp(String s, String p, int[] next)
{
int i=0,j=0;
for(;i< s.length() && j<p.length();)
{
if(j==0 && s.charAt(i) != p.charAt(j))
{
i++;
}
if(s.charAt(i) == p.charAt(j))
{
i++;
j++;
}
else j=next[j];
}
if(j==p.length())
return i-j;
return 0;
}
有空了解一下bm算法