说明:
这里只是简单实现了一下KMP算法,是博主的一个笔记,具体原理就不说了,有点复杂,而且其他博主讲的更精,这里推荐b站上搜代码随想录卡尔,讲得很明白
/**
*
* @param target 目标串
* @param dest 模式串
* @return 模式串在目标串中出现的第一个的下标,若没有则返回-1
*/
public static int KMP(String target,String dest){
int[] next = new int[dest.length()];//存储最长相等前后缀
//这一步代表获取next值
for(int i = 1,j = 0;i<dest.length();i++){
while(j>0&&dest.charAt(i)!=dest.charAt(j))//前后缀不相同
j = next[j-1];
if(dest.charAt(i)==dest.charAt(j))//前后缀相同
j++;
next[i] = j;
}
//i表示目标串下标,j表示模式串下标
for(int i = 0,j=0;i<target.length();i++){
while(j>0&&target.charAt(i)!=dest.charAt(j))//无法匹配j根据next数组回退
j = next[j-1];
if(target.charAt(i)==dest.charAt(j))//相同则j++继续,同时进入下一轮循环
j++;
if(j == dest.length())//j匹配到末尾,说明匹配成功
return i-j+1;
}
return -1;//未找到返回-1
}
本文档提供了一个简单的KMP字符串匹配算法实现,通过创建next数组获取模式串的最长公共前后缀,并在目标串中查找模式串的首次出现位置。博主推荐在B站上搜索'代码随想录卡尔'查看更详细的KMP算法解释。
465

被折叠的 条评论
为什么被折叠?



