串的模式匹配算法 子串(模式串)的定位操作通常称为串的模式匹配。 这是串的一种重要操作,很多 软件,若有“编辑”菜单项的话, 则其中必有“查找”子菜单项。 串的顺序存储实现 BF算法设计思想: 将主串的第pos个字符和模式的第1个字符比较, 若相等,继续逐个比较后续字符; 若不等,从主串的下一字符( ...
分类:
编程语言 时间:
2019-05-13 23:01:38
阅读次数:
180
BF算法 考试必考 !!!!!背下来!!!! int lndex_BF(string s,string t,int pos) {//返回模式t在主串s中第pos个字符开始第一次出现的位置下标 //若不存在,则返回值为-1 //其中,t非空,1<=pos<=StrLength(s) int i,j; ...
分类:
编程语言 时间:
2019-05-04 17:31:32
阅读次数:
163
关于模式匹配算法,在这里我想总结一下KMP算法。 KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。 然后上下代码: public static int KMP ...
分类:
其他好文 时间:
2019-04-15 01:08:42
阅读次数:
178
第四章 题目:串的模式匹配 给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置。 (用KMP算法,就是不用再回溯, 最前面的k个字符和j之前的最后k个字符是一样的:P[1~ k] == P[j ...
分类:
编程语言 时间:
2019-04-15 01:05:47
阅读次数:
215
一、病毒匹配这个程序主要就在三个函数 第一个比较简单,想方设法把下标0从1开始, 于是,就用了strcat 的方法,在主串和模式串的前面加个任意字符的。 但是在vs 的时候出现了一个内存不足的问题? 于是把这个改成了如图所示 strcat_s, 编译没有问题了,但是在pta 上面会显示编译错误。 当 ...
分类:
其他好文 时间:
2019-04-15 01:00:52
阅读次数:
182
串:是由零个或多个字符组成的有限序列;包含字符的个数称串的长度; 空串:长度为零的串称空串; 空白串:由一个或多个空格组成的串称空白串; 子串:串中任意个连续字符组成的子序列称该串的子串; 主串:包含子串的串称主串; 子串的首字符在主串中首次出现的位置定义为子串在主串中的位置; 空串是任意串的子串; ...
分类:
其他好文 时间:
2019-04-15 00:37:36
阅读次数:
160
这两周上课学的较多且比较有印象的是串的模式匹配算法那道题 同时可以用BF或者KMP算法进行解决。 一开始学BF算法时就在想如何改进可以使匹配更加简便 后来KMP的学习让我对串的学习有了更深入的了解 同时BF和KMP算法之间的联系也是一个算法改进的很好学习范例 7-1 串的模式匹配 给定一个主串S(长 ...
分类:
其他好文 时间:
2019-04-14 17:57:05
阅读次数:
240
串的模式匹配 一、BF算法 —— 暴力匹配 1、当前匹配,++i;++j; 2、当前不匹配,i=i-j+2;j=1; 二、KMP算法 首先是主串s 和模式串t 的比较,当前比较的是主串s的第i个和模式串的第j个,若s[i]==t[j]; 则++i; ++j; 这里i,j为位置,而非下标 当出现不匹配 ...
分类:
其他好文 时间:
2019-04-14 09:29:43
阅读次数:
102
KMP算法的重点在于: 当某一个字符与主串不匹配时,我们应该知道把指针j移动到哪里 java // next[j] = k,表示当T[i] != P[j]时,j指针的下一个位置 public static int[] getNext(String ps) { char[] p = ps.toChar ...
分类:
编程语言 时间:
2019-04-09 23:26:16
阅读次数:
282
什么是KMP? KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。 看了一位程序员的博客(https://www.cnblogs.com/yjiyjige/p/3263858.html)感觉他的求next[]数组的代码很精简,顺手 ...
分类:
编程语言 时间:
2019-04-03 12:47:12
阅读次数:
193