关键词:
简介
算法说明
j | 0 | 1 | 2 | 3 | 4 | 5 |
W[j] | a | b | a | c | a | b |
F(j) | 0 | 0 | 1 | 0 | 1 | 1 |
public class StringMatching public static void main(String[] args) //暴力匹配算法 String str1 = "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好"; String str2 = "尚硅谷你尚硅你"; int match = violenceMatch(str1, str2); // System.out.println(match); String s1= "BBC ABCDAB ABCDABCDABDE"; String s2 = "ABCDABD"; String s3 = "ABC"; int[] next = kmpNext("ABCDABD");//[0,1] int res = kMP(s1, s2, next); System.out.println(Arrays.toString(next)); System.out.println(res); /*暴力匹配算法*/ public static int violenceMatch(String str1,String str2) char[] s1 = str1.toCharArray(); char[] s2 = str2.toCharArray(); int i=0;//索引指向s1 int j = 0;//索引指向s2 while (i<s1.length&&j<s2.length)//匹配不越界 if (s1[i] ==s2[j])//匹配成功 i++; j++; else //不成功 i = i -(j-1); j=0; //判断是否匹配成功 if (j==s2.length) return i-j; else 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++) //当不相等时需要从j-1获取新的j /*直到发现dest.charAt(i) == dest.charAt(j)退出*/ while (j>0 &dest.charAt(i) != dest.charAt(j)) j=next[j-1];//kmp算法的基础 if (dest.charAt(i) == dest.charAt(j)) j++; next[i] =j; return next; /*KMP算法查找字符最早出现的位置*/ public static int kMP(String str1,String str2,int[] next) for (int i = 0 ,j=0; i <str1.length() ; i++) /*需要考虑str1.charAt(i) !=str2.charAt(j)时*/ 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;
kmp算法(代码片段)
1.KMP算法介绍在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用... 查看详情
kmp算法(代码片段)
1.KMP算法介绍在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用... 查看详情
kmp算法(代码片段)
KMP算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达... 查看详情
kmp算法(代码片段)
基本介绍KMP算法是一种用于字符串匹配的算法,网上关于kmp的介绍很多,也十分复杂,(其实我也没怎么搞懂)。首先我们还是考虑朴素的匹配,暴力枚举匹配起点,遇到不匹配的点,就直接退出,进行下一个起始点开始的一轮... 查看详情
算法kmp字符串匹配算法(代码片段)
【原理】(1)next数组原理 (2)特殊情况的处理(巧妙增设哨兵)(3)递推法构造next[]表 【实现代码】#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintmaxn=100;chart[maxn];//textcharp[ 查看详情
java数据结构&算法宁可累死自己,也要卷死别人17kmp算法(代码片段)
...&算法的新篇章.KMP算法KMP(Knuth-Morris-Pratt),是一种改进的字符串匹配算法.KMP算法解决了暴力匹配需要高频回退的问题,KMP算法在匹配上若干字符后,字符串位置不需要回退,从而大大提高效率.如图:举个例子(字符串“abcabcdef”匹配... 查看详情
kmp算法(代码片段)
... 避免从头匹配:最长相同前缀后缀KMP第一个线性的字符串匹配算法。算法的优化就是不做无功用,暴力匹配算法每次不匹配时,会重新开始新匹配。KMP的优化在于,知道 查看详情
字符串匹配算法(bf算法&&kmp算法)(代码片段)
字符串匹配算法暴力匹配(BF)算法KMP算法next数组求next数组的练习next数组的优化(nextval数组)练习暴力匹配(BF)算法BF算法,即暴力(BruteForce)算法,是普通的模式匹配算法,BF算法的思想就是... 查看详情
字符串-kmp算法(代码片段)
字符串算法中,字符串匹配是一个非常重要的应用。例如在网页中查找关键词,其实就是在对字符串匹配,也就是看一个主字符串中是否包含了一个子字符串。而KMP算法在字符串匹配方法中一个很著名并且很聪明的算法,当然也... 查看详情
kmp算法(代码片段)
...计算next数组前缀和后缀公共部分的最大长度next数组匹配字符串KMP算法基本思想算法由两部分组成计算ptr每一位及之前的字符串中,前缀和后缀公共部分的最大长度的next数组匹配ptr和str,当ptr失配时,利用next数组,实现ptr的最... 查看详情
kmp算法详解及其java实现(代码片段)
KMP算法,又称作“看猫片”算法(误),是一种改进的字符串模式匹配算法,可以在O(n+m)的时间复杂度以内完成字符串的匹配操作,其核心思想在于:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经... 查看详情
kmp算法(字符串的匹配)(代码片段)
视频参考 对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(m+n)。 设主串为ptr="ababaaababaa";,要比较的子串为a=“aab”; KMP算法用到了next... 查看详情
kmp字符串匹配算法(代码片段)
去年冬天就接触KMP算法了,但是听的不明不白,遇到字符串匹配的题我大都直接使用string中的find解决了,但今天数据结构课又讲了一下,我觉得有必要再来回顾一下。之前看过很多关于KMP的博客,有很多虽然很好,但是要么太... 查看详情
kmp算法(代码片段)
数据结构_串对于串,今天就总结了一个算法,关于字符串的模式匹配问题(重点在于kmp算法).普通的模式匹配算法,当匹配不成功时需要将主串的下标恢复到之前匹配的下一个字符,子串下标置为串首;而kmp算法则不需要重置主串的下标... 查看详情
[模板]kmp算法(代码片段)
...。结果写出来之后一直死循环,最后我还是改回从0读入字符串了。[预先定义被匹配文本串为s1,长度为m;匹配模式串为s2,长度为n]KMP算法在字符串匹配算法中时间复杂度比较优,可以做到在O(m+n)的时间内匹配,相对于无脑暴力... 查看详情
kmp算法(代码片段)
字符串匹配中经常会用到KMP算法。它求解的问题类型是:字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 我们一般的做法是:将一个字符串(长度为n,模式串... 查看详情
字符串模式匹配中的bf算法与kmp算法(代码片段)
博客园的编辑器太难用了。。。。。。。。。。。BF算法即暴力算法,很简单,随便举个栗子:#include<iostream>#include<cstring>usingnamespacestd;//S[]:要匹配的链//T[]:模式串intBFsearch(intstart,charS[],charT[])intslen=strlen(S);inttlen=strlen(T 查看详情
kmp算法(代码片段)
...sp;例子-->移动位数=已经匹配的字符数-对应匹配部分字符串前缀和后缀共有长度如以上主串中的“abab”和目标串中的“abad”,已经匹配的字符数为3(“aba”),“aba”的前缀为[a,a 查看详情