KMP算法

[b]算法思想:[/b]

一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为KMP算法。此算法可以在O (n+m)的时间数量级上完成串的模式匹配操作,其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯指针,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离,继续进行比较。


package com.java.caul;

public class test2 {
private static int[] get_nextval(String t) {

int i = 0, j = -1;
int[] next = new int[t.length()];
next[0] = -1;
char[] s = t.toCharArray();

while (i < next.length-1) {
if (j == -1 || s[i] == s[j]) {
i++;
j++;
next[i] = j;
} else
j = next[j];

}
for (int k = 0; k < next.length; k++) {
System.out.print(next[k] + " ");
}
System.out.println();
return next;
}

private static int index_KMP(String s, String t) {
int []next=get_nextval(t);
int i = 0;
int j = -1;
while (i < s.length() && j < t.length()) {
if (j == -1 || (s.charAt(i) == t.charAt(j))) {
i++;
j++;
} else
//j = (next[j] - 1);
j=next[j];
}
if (j >= t.length() - 1) {
return (i - t.length() + 1);
} else
return -1;
}

public static void main(String[] args) {
System.out.println(index_KMP("Test ititi ititit! Test ititit!这个会匹配2次", "ititit"));
System.out.println(index_KMP("abababababcababb","ababcabab")) ;

}

}


运行结果:

-1 0 0 1 2 3
12
-1 0 0 1 2 0 1 2 3
7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值