kmp解决字符串算法

package com.zou.Algorithm.kmp;

import java.util.Arrays;

public class KmpAlgorithm {
public static void main(String[] args) {
String str1="BBC ABCDAB ABCDABCDABDE";
String str2="ABCDABD";
int[] next=kmpNext("ABCDABD");
System.out.println("next="+ Arrays.toString(next));
int index=kmpSearch(str1,str2,next);
System.out.println("index="+index);
}
//搜索算法
public static int kmpSearch(String str1,String str2,int[] next){//next匹配表
for (int i = 0,j=0; i < str1.length(); i++) {
while(j>0&&str1.charAt(i)!=str2.charAt(j)){
j=next[j-1];//核心
}
if (str1.charAt(i)==str2.charAt(j)){
j++;
}
if (j==str2.length()){
return i-j+1;
}
}
return -1;
}
//获取字符串的部分匹配值表
public static int[]kmpNext(String dest){
//创建一个数组保存next匹配值
int[] next = new int[dest.length()];
next[0]=0;//如果字符串长度是1,部分匹配值就是0
for (int i = 1,j=0; i < dest.length(); i++) {//
//dest.charAt(i)!=dest.charAt(j)不等从next[]从新获取
//直到成立dest.charAt(i)==dest.charAt(j)退出
while(j>0&&dest.charAt(i)!=dest.charAt(j)){
j=next[j-1];//核心
}
if (dest.charAt(i)==dest.charAt(j)){
j++;
}
next[i]=j;
}
return next;
}

}
posted @   开源遗迹  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示