kmp算法实现
来源:互联网 发布:淘宝3c快熟认证 编辑:程序博客网 时间:2024/06/08 06:00
java实现:
package al;
import java.util.ArrayList;
public class KMP {
//获取nexk数组
public static int[] getNext(String source){
int len=source.length();
int[] next =new int[len];
next[0]=-1;
int k=-1;
int i=0;
while(i<len-1){
while(k>=0&&source.charAt(i)!=source.charAt(k)){
k=next[k];
}
i++;
k++;
if(source.charAt(i)!=source.charAt(k)){
next[i]=k;
}
else{
next[i]=next[k];
}
}
return next;
}
//for循环获取next数组
public static int[] getNext_2(String source){
int len = source.length();
int[] next = new int[len];
next[0]=-1;
int k=-1;
for(int i=1;i<len;i++){
while(k>=0&&source.charAt(i-1)!=source.charAt(k)){
k=next[k];
}
k++;
if(source.charAt(i)!=source.charAt(k)){
next[i]=k;
}
else{
next[i]=next[k];
}
}
return next;
}
//实现字符串匹配
public static ArrayList<ArrayList<Integer>> getAdress(String source,String target){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
int[] next = getNext(source);
int index=0,start=0,end=0;
while(start<target.length()-source.length()+1){
while(index<source.length()&&source.charAt(index)==target.charAt(end)){
end++;
index++;
}
if(index==source.length()){
ArrayList<Integer> temp = new ArrayList<>();
temp.add(start);
temp.add(end-1);
list.add(temp);
index=0;
start=end;
}
else{
index=next[index];
start=end-index;
if(index<0){
end=start;
index=0;
}
}
}
return list;
}
public static void main(String[] args){
String source = "abcdaabcab";
String target ="abcdadsdshdabcdaabcabrdfewecdsdesabcdaabcab";
// int[] next =getNext_2(source);
// for(int i=0;i<next.length;i++){
// System.out.print(next[i]+" ");
// }
System.out.println(getAdress(source, target).toString());
}
}
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- KMP算法c++实现
- KMP算法java实现
- kmp算法实现
- Mahout Random Forests
- ubuntu上在使用c/c++连接mysql时,出现undefined reference错误解决办法
- 关于伪类与伪元素及其前面的冒号和两个冒号的使用
- 判断多选框的值是否在指定范围内/判断多选框的值是否包含在另一组值中
- my_string-part1
- kmp算法实现
- android多媒体框架学习 详解 最新版本
- Qt实现拖拽数据的功能
- android系统资源预加载和缓存原理分析
- 10 GridView 样式属性
- Spring-6 使用外部属性文件
- UGUI内核大探究(十四)Text
- java设计模式之建造者模式
- 函数返回值的几种情况