KMP算法
2015-08-20 11:13
239 查看
KMP算法
public class KmpmMethod {
/**
* 具体的匹配
* @param str1
* @param str2
* @return
*/
public static int kMPMatcher(String str1,String str2){
int i=0,j=-1;
int arr[]=next(str2);
while(i<str1.length()&&j<str2.length()){
if(j==-1||str1.charAt(i)==str2.charAt(j)){
i++;
j++;
}
else j=arr[j];
}
if(j==str2.length())
return i-j;
return -1;
}
/**
* next函数
* @param str
* @return
*/
public static int[] next(String str){
int j=-1,i=0;
int arr[]=new int[str.length()+1];
arr[0]=-1;
while(i<str.length()){
if(j==-1||str.charAt(i)==str.charAt(j)){
j++;
i++;
arr[i]=j;
}
else
j=arr[j];
}
return arr;
}
public static void main(String[] args) {
String str1="abcacbaaacabeabccaaa";
String str2="aacab";
int result=kMPMatcher(str1,str2);
if(-1==result){
System.out.println("没有找到匹配的字串");
}else{
System.out.println("匹配的位置为"+result);
}
}
}
public class KmpmMethod {
/**
* 具体的匹配
* @param str1
* @param str2
* @return
*/
public static int kMPMatcher(String str1,String str2){
int i=0,j=-1;
int arr[]=next(str2);
while(i<str1.length()&&j<str2.length()){
if(j==-1||str1.charAt(i)==str2.charAt(j)){
i++;
j++;
}
else j=arr[j];
}
if(j==str2.length())
return i-j;
return -1;
}
/**
* next函数
* @param str
* @return
*/
public static int[] next(String str){
int j=-1,i=0;
int arr[]=new int[str.length()+1];
arr[0]=-1;
while(i<str.length()){
if(j==-1||str.charAt(i)==str.charAt(j)){
j++;
i++;
arr[i]=j;
}
else
j=arr[j];
}
return arr;
}
public static void main(String[] args) {
String str1="abcacbaaacabeabccaaa";
String str2="aacab";
int result=kMPMatcher(str1,str2);
if(-1==result){
System.out.println("没有找到匹配的字串");
}else{
System.out.println("匹配的位置为"+result);
}
}
}
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- KMP算法的C#实现方法