假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 首先,先理清楚了暴力匹配算法的流程及内在的逻辑: 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i ...
分类:
编程语言 时间:
2016-08-12 15:19:57
阅读次数:
218
题目大意:统计模式串出现的次数。 题目分析:模板题。 代码如下: ...
分类:
其他好文 时间:
2016-08-11 17:54:08
阅读次数:
410
题目大意:找出出现次数最多的模式串。 题目分析:AC自动机裸题。 代码如下: ...
分类:
其他好文 时间:
2016-08-09 13:40:49
阅读次数:
183
后缀数组看了好几个小时,才明白了工作原理,了解后缀数组可以看下面的论文 论文: 罗穗骞《后缀数组——处理字符串的有力工具》,百度很容易找到 主要介绍几个简单应用 1.模式串匹配 2.可重复最长重复子串 3.不可重复最长重复子串 4.可重叠最长 k-重复子串 5.重复次数最多子串 6.最长回文串 7. ...
分类:
编程语言 时间:
2016-08-08 17:12:53
阅读次数:
352
HDU 5763 Another Meaning 题意:一个字串有可能在模式串出现多次,问有多少种可能出现的情况。关键是有重合的字串是不能同时计入的。 思路:先用kmp求出所有字串的位置。然后,dp. 二维的时候:dp[i][j] i表示前i个子串,j的值1表示一定用这个串,0表示不用。值表示字串出 ...
分类:
其他好文 时间:
2016-07-29 21:10:17
阅读次数:
196
母串:S[i] 模式串:T[i] 标记数组:Next[i](Next[i]表示T[0~i]最长前缀/后缀数) 先来讲一下最长前缀/后缀的概念 例如有字符串T[6]=abcabd接下来讨论的全部是真前缀/真后缀,也就是除去串自己本身之外的前缀/后缀 T[0]=a,此时前后缀都是a那么Next[0]=1 ...
分类:
编程语言 时间:
2016-07-28 16:13:48
阅读次数:
254
BM算法 后缀匹配,是指模式串的比较从右到左,模式串的移动也是从左到右的匹配过程,经典的BM算法其实是对后缀蛮力匹配算法的改进。为了实现更快移动模式串,BM算法定义了两个规则,好后缀规则和坏字符规则,如下图可以清晰的看出他们的含义。利用好后缀和坏字符可以大大加快模式串的移动距离,不是简单的++j,而 ...
分类:
编程语言 时间:
2016-07-24 17:50:58
阅读次数:
685
1.简介 暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理。然而它最大的问题就是运行速度太慢,所以在很多场合下暴力字符串匹配算法并不是那么有用。我们需要一些更 ...
分类:
编程语言 时间:
2016-07-24 11:55:42
阅读次数:
274
一:概述 在实际中,经常需要用到字符串的模式匹配处理。即在指定文本串中定位指定的模式串,统计所有与模式串的偏移位置情况。而解决该问题的算法也有许多种,最为普通的算法莫过于“朴素匹配算法”。如果构成字符串的有限字符集全为数字类型的字符,则还可以考虑R-K匹配算法(即:Rabin & Karp提出的匹配 ...
分类:
编程语言 时间:
2016-07-23 16:47:29
阅读次数:
355
KMP算法主要用于解决单模式串的匹配问题,即:给定主串s和模式串p,问p是否是s的子串(len(s)<=N, len(p)<=M)。 先考虑最朴素的算法,即枚举s中的起点i,检查s[i..i+M-1]是否等于p,这样的时间复杂度为O(NM)。 分析一下为什么这样的算法效率低(建议读者手动画个图):设 ...
分类:
其他好文 时间:
2016-07-23 15:23:48
阅读次数:
182