关于字符串的AC自动机,KMP,Trie树,后缀数组。
KMP是基础。当一个字符串与模式串匹配的时,若失配,利用前面匹配的信息,利用三部分连等关系。可以滑动的“恰如其分”。
Next数组的求法:
若此时求的是next[i]的数值,j位置之前的与从i开始后j-1个字符都是匹配的,若s[i]==s[j] 那么next[++i]=++j; 若不相等可以j=next[j]滑动回去。
OK,那么什么...
分类:
其他好文 时间:
2014-11-17 21:24:09
阅读次数:
164
lua 标签解析器概述一个类xml标签解析函数,将标签解析成Lua中的表结构它可以用来解析简单xml结构,可以作为RichLabel控件的字符串解析组件(其实它现在就是这么用的;-))原理使用lua的模式匹配, 使用了模式串%b%b用来匹配对称的字符。常写为%bxy,x和y是任意两个不同的字符。 x...
分类:
其他好文 时间:
2014-11-14 23:59:21
阅读次数:
555
Kmp算法我是看July博客学习,这里只是做个笔记,详细内容见July的blog:
http://blog.csdn.net/v_july_v/article/details/7041827
Kmp算法的用途:有一个文本串S和一个模式串P,现在要查找P在S中的位置。暴力匹配算法需要对文本串S进行回溯,kmp算法就是让文本串不回退,只需要移动模式串j即可。
Kmp算法大体思想:就是当s...
分类:
编程语言 时间:
2014-11-14 22:51:19
阅读次数:
283
题目链接:点击打开链接
题意:
case数
n个模式串
一个母串。
问:n个模式串出现的种数(一个模式串多次出现只算一次)
对于 "ABC" , 若母串出现了"CBA"这样的反串,也算出现了。
所以:
1
ABC
CBA
ans = 1
#include
#include
#include
#include
#include
using namespace st...
分类:
Web程序 时间:
2014-11-11 00:53:31
阅读次数:
306
首先我们来看一下字符串的朴素匹配.
可以想象成把文本串s固定住,模式串p从s最左边开始对齐,如果对齐的部分完全一样,则匹配成功,失败则将模式串p整体往右移1位,继续检查对齐部分,如此反复.
#朴素匹配
def naive_match(s, p):
m = len(s); n = len(p)
for i in range(m-n+1):#起始指针i
if s[i...
分类:
编程语言 时间:
2014-11-10 12:04:51
阅读次数:
180
常见的字符串匹配时,模式串长度为n,源串长度为m,则从头匹配,两个指针i指向源串,j指向模式串,如遇到不同则回溯使j=0,这样就要反复匹配会使效率变低。因为在如今i之前 的模式串与匹配串的匹配是同样的,即回溯时,不用将模式串与源串进行匹配,而仅仅将模式串与自身匹配就可以得到其是否须要回溯以及回溯到何...
分类:
编程语言 时间:
2014-11-04 22:31:39
阅读次数:
246
简介Aho-Corasick算法简称AC算法,通过将模式串预处理为确定有限状态自动机,扫描文本一遍就能结束。其复杂度为O(n),即与模式串的数量和长度无关。思想自动机按照文本字符顺序,接受字符,并发生状态转移。这些状态缓存了“按照字符转移成功(但不是模式串的结尾)”、“按照字符转移成功(是模式串的结...
分类:
编程语言 时间:
2014-11-01 00:54:51
阅读次数:
578
前面介绍在BF,KMP这些算法的时候老是提到BM这个东西,究竟这什么东西,有啥高深的,这些问题我们如今不去考虑。不知道,认真读前几篇文章的读者有没有发现前面的算法都是从模式串的前面開始匹配的,那我们就想能不能从模式串的后面開始匹配了? 答案肯定是能够的。所以这就有了我们今天的这篇文章Horspool...
分类:
编程语言 时间:
2014-10-29 16:29:06
阅读次数:
237
输入第一行一个整数N,表示测试数据组数。接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。其中N 2 #include 3 #include 4 5 #define N 20 6 #de...
分类:
编程语言 时间:
2014-10-28 17:27:26
阅读次数:
237
在介绍KMP算法之前,先介绍一下BF算法。一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 举例...
分类:
编程语言 时间:
2014-10-24 16:14:49
阅读次数:
298