算法思想:
一种改进的字符串匹配算法,由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
分享到:
相关推荐
KMP算法
算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP
KMP算法详解KMP算法详解KMP算法详解KMP算法详解KMP算法详解
kMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法Java...
KMP算法详解KMP算法详解KMP算法详解KMP算法详解
用C++语言实现的KMP算法。经过调试。供广大算法学习者参考。
数据结构、kmp算法、代码实现、KMP(char *P,char *T,int *N,int start)
kmp算法,数据结构的实验报告,大学实验报告,希望能帮到大家
数据结构中KMP算法过程的Flash演示
kmp算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串...
DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法
KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。
KMP算法是对一般模式匹配算法的改进,由D.E.Knuth与V.R.Pratt和J.H.Morris 同时发现的因此人们称它为克努特-莫里斯-莫拉特操作(简称为KMP算法)。 对于一般的模式匹配算法:分别利用两个指针i和j指示主串S和T中的...
此程序配合清华大学出版《数据结构(C语言版)》 P83-84页的KMP算法 win tc调试通过
KMP算法实现 KMP算法实现 KMP算法实现 KMP算法实现
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配...
kmp算法的原理以及kmp算法的源代码
使用KMP算法实现模式匹配,包括next数组的求解,kmp算法的实现。关键代码有详细注释。
KMP算法的实现, 这程序代码是基于KMP算法来实现的,虽然很简单,但是可能也会对你有帮助的
利用KMP算法进行子串的快速查找,能够达到较高的速率