给出若干模式串,再给出若干询问串,求每个询问串作为多少个模式串的子串出现。如果一个串是另一个串的子串,则一定是另一个串某个前缀的后缀或者某个后缀的前缀。根据字典树的性质,将模式串的每一个后缀插入字典树中,同时更新字典树中节点的cnt值。这里需要注意不要重复累加贡献,可以在字典树中新增一个num的信息...
分类:
其他好文 时间:
2015-11-10 00:08:03
阅读次数:
148
举个例子模式串S:asdasdasdfasd匹配串T:asdasdf如果使用朴素匹配算法——123456789asdasdasdfasdasdasdf1234567此时,匹配到了S7和T7了,S7为a而T7为f,不匹配那么朴素的匹配算法会这么做——123456789asdasdasdfasdasda...
分类:
编程语言 时间:
2015-11-09 17:17:45
阅读次数:
261
题意: 给出一个模式串pattern,再给出一个串str,问str的模板是否是pattern。思路: 注意点:只要对于所有pattern[i]相同的i,str中对应的所有words[i]也必须相同,反过来,一个words[i]对应的也只有一个pattern[i]。 乱搞: 1 class So...
分类:
其他好文 时间:
2015-11-03 21:03:41
阅读次数:
228
前言: KMP算法是一种字符串匹配算法,由Knuth,Morris和Pratt同时发现(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。比较流行的做法是实现一个next()函数,函数本身包含了模式串的局部匹配信息。由于next函数理解起....
分类:
编程语言 时间:
2015-10-31 17:12:50
阅读次数:
371
前些日子写了一篇KMP算法的博文,浅谈数据结构之KMP(串中的模式匹配算法),在这片文章中,谈到了一个模式串K值的记录数组next[],详细可看那篇文章,其实,前面定义的next[]数组是有一定缺陷的,下面我面我将针对一种情况进行举例: 如上图,如果按照之前的方法所获取的next[]数组的话,当两....
分类:
编程语言 时间:
2015-10-25 20:48:22
阅读次数:
240
朴素模式匹配算法
public class Test {
//朴素模式匹配算法
public int Index(String s,String t,int pos){
int i = pos;//主串中第几个位置开始比较
int j = 0;//模式串中的第一个位置
while(i<s.length()&&j<t.lengt...
分类:
编程语言 时间:
2015-10-18 23:17:22
阅读次数:
409
有了KMP和Trie的基础,就可以学习神奇的AC自动机了。AC自动机其实就是在Trie树上实现KMP,可以完成多模式串的匹配。 AC自动机 其实 就是创建了一个状态的转移图,思想很重要。 推荐的学习链接:http://acm.uestc.edu.cn/bbs/read.php?tid=4294ht....
分类:
其他好文 时间:
2015-10-13 00:20:09
阅读次数:
300
说起kmp就要从字符串的匹配说起,下面我们谈谈字符串的匹配给定一个原字符串:bababababababababb,再给定一个模式串:bababb,求模式串是否在源字符串中出现最简单的方法就是遍历源字符串,再遍历模式串,依次进行对比。当遇到不匹配的字符时源字符串和模式串返回下一个位置重新开始匹配,复杂...
分类:
其他好文 时间:
2015-10-10 00:19:30
阅读次数:
209
问题:串的模式匹配
KMP算法:#include
#include "sqString.h"
void GetNext(SqString t,int next[]) /*由模式串t求出next值*/
{
int j,k;
j=0;
k=-1;
next[0]=-1;
while (j<t.length-1)
{...
分类:
编程语言 时间:
2015-10-07 19:02:16
阅读次数:
203
题目链接:codeforces 494B题目大意:给出两个字符串,问第一个字符串由多少种方法提取出一些子串使这些子串中都包含t模式串。题目分析:
定义状态dp[i]表示前i个字符由多少种方法得到符合要求的字符串组。
dp[i]=dp[i?1]+∑j=0l?1dp[j]+ldp[i] = dp[i-1] + \sum_{j=0}^{l-1}dp[j] + l
解释:
首先dp[i-1]代表的是不重新...
分类:
其他好文 时间:
2015-10-07 12:17:32
阅读次数:
197