KMP字符串匹配
2012-09-13 17:22
218 查看
java版本:
package util; public class KMPStringMatch { //KMP字符串匹配 private int[] getNext(String T){//T为模式串 int[] next=new int[T.length()]; int j=1;// int k=0;// next[0]=-1; next[1]=0; while (j<T.length()-1) { if (T.charAt(j)==T.charAt(k)) { next[j+1]=k+1; j++; k++; } else if (k==0) { next[j+1]=0; j++; } else { k=next[k]; } } return next; } @SuppressWarnings("unused") private int[] getNextVal(String T){ int[] nextval=new int[T.length()]; int j=0;// int k=-1;// nextval[0]=-1; while (j<T.length()-1) { if (k==-1 || T.charAt(j)==T.charAt(k)) { j++; k++; if (T.charAt(j)!=T.charAt(k)) { nextval[j]=k; } else { nextval[j]=nextval[k]; } } else { k=nextval[k]; } } return nextval; } public int indexKMP(String S,String T,int start){ //模式串T与主串S匹配 int[] next=getNext(T); int i=start;//主串指针 int j=0;//模式串指针 while (i<S.length()&&j<T.length()) { if (j==-1||S.charAt(i)==T.charAt(j)) { i++;j++; } else { j=next[j]; } } if (j<T.length()) { return -1;//匹配失败 }else { return (i-T.length());//匹配成功 } } //测试 public static void main(String[] args) { KMPStringMatch ksm=new KMPStringMatch(); int result=ksm.indexKMP("ababcabcacbab", "abcac", 0); System.out.println(result); } }
相关文章推荐
- 字符串匹配算法——BF、KMP、Sunday
- 算法模板——KMP字符串匹配
- 洛谷P3375 - 【模板】KMP字符串匹配
- leetcode oj 28 字符串匹配 kmp 下标从0开始 kuangbin模板
- HDU 1686 Kmp(字符串匹配)
- KMP字符串匹配算法及C语言实现
- luoguP3375 【模板】KMP字符串匹配
- Codevs 1404 字符串匹配(Kmp)
- zstu.4194: 字符串匹配(kmp入门题&& 心得)
- 洛谷P3375【模板】KMP字符串匹配
- 洛谷P3375 【模板】KMP字符串匹配
- 字符串匹配のKMP【@Abandon】
- 关于线性字符串匹配的算法-----KMP的算法
- 数据结构与算法之KMP 字符串匹配
- 【KMP&字符串匹配】Implement strStr()
- P3375 【模板】KMP字符串匹配
- 查找-基于DFA的KMP字符串匹配
- KMP(字符串匹配)算法
- 算法|KMP:字符串匹配(人话版)
- KMP字符串匹配