//KMP算法实现字符串的匹配(查找)
class KmpDemo
{
public static void main(String[] args)
{
String target="abcabcbcfhgefja";
String pattern="bcf";
int index=indexOf(target,pattern,0);
System.out.println("返回第一个子串的位置:"+index);
}
public static int indexOf(String target,String pattern,int start)
{
int i=start;
int j=0;
int[] next=getNext(pattern);
if(target!=null && pattern!=null && target.length()>=pattern.length() && pattern.length()>0)
{
while(i<target.length())
{
if(j==-1|| target.charAt(i)==pattern.charAt(j))//继续比较后续的字符
{
i++;
j++;
}
else
j=next[j]; //获得下一次匹配的字符序号
if(pattern.length()==j)
return i-j;//返回匹配成功的字串序号
}
}
return -1; //不成功返回-1
}
private static int[] getNext(String pattern) //next数组
{
int j=0;
int k=-1;
int[] next=new int[pattern.length()];
next[0]=-1;
while(j<pattern.length()-1)
{
if(k==-1 ||pattern.charAt(j)==pattern.charAt(k) )
{
j++;
k++;
if(pattern.charAt(j)!=pattern.charAt(k))
{
next[j]=k;
}
else
next[j]=next[k];
}
else
k=next[k];
}
return next;
}
}
KMP算法
最新推荐文章于 2023-04-09 17:43:52 发布