KMP算法

来源:互联网 发布:淘宝白菜群怎么得佣金 编辑:程序博客网 时间:2024/05/21 04:21
//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++;}elsej=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;}elsenext[j]=next[k];}elsek=next[k];}return next;}}

0 0