您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
KMP算法解决字符传匹配(图文)
第十三双眼睛2023-10-22【数据结构与算法】人已围观
简介KMP算法解决字符传匹配
KMP算法解决字符传匹配
package com.xingchen.day016; import java.util.Arrays; public class KMP { public static void main(String[] args) { String s1 = "BBC ABCDAB ABCDABCDABDE"; String s2 = "ABCDABD"; int[] next = kmpNext("ABCDABD"); int search = kmpSearch(s1, s2, next); //System.out.println(Arrays.toString(next)); System.out.println(search); } public static int kmpSearch(String s1,String s2,int[] next) { for (int i = 0, j = 0; i< s1.length(); i++) { while (j> 0 && s1.charAt(i) != s2.charAt(j)) { j = next[j - 1]; } if (s1.charAt(i) == s2.charAt(j)) { j++; } if (j == s2.length()) { return i -j + 1; } } return -1; } public static int[] kmpNext(String dest) { //创建一个数组,保存部分匹配值 int[] next = new int[dest.length()]; next[0] = 0;//如果字符串的长度为1,则部分匹配值就是0 for (int i=1, j= 0 ; i<dest.length(); i++) { //当charAt(i)不等于charAt(j)时,需要从next中获取新的j //直到charAt(i)等于charAt(j)时 退出 while (j > 0 && dest.charAt(i) != dest.charAt(j)) { j = next[j-1]; } // charAt(i)等于charAt(j)时 if (dest.charAt(i) == dest.charAt(j)) { j ++; } next[i] = j; } return next; } } |
Tags:
很赞哦! ()
上一篇:字符串暴力匹配(图文)
下一篇:贪心算法(图文)
相关文章
随机图文
-
路径总和(图文)
路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 -
同构字符串(图文)
同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 -
快乐数(图文)
快乐数 编写一个算法来判断一个数 n 是不是快乐数。 快乐数定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 -
快速排序法(图文)
快速排序法