两个串,考虑一建一跑。枚举模式串的位置$i$,考虑每次统计以$i$结尾的所有符合要求的串。在后缀自动机上走时记录当前匹配长度$curlen$,则当前节点的贡献是$(curlen len[f[o]]) rgtsiz[o]$。由蛋糕性质,这个结点在parent树上到根的链也要统计答案,其贡献为$(len ...
分类:
其他好文 时间:
2018-09-15 22:01:03
阅读次数:
144
KMP T串主串 P串模式串 i T串:A B C A B C D H I J K P串: A B C E j 保持i指针不回溯,通过修改j指针,让模式串尽量地移动到有效的位置 接下来我们自己来发现j的移动规律: 如图:C和D不匹配了,我们要把j移动到哪?显然是第1位。为什么?因为前面有一个A相同啊 ...
分类:
其他好文 时间:
2018-09-14 00:04:31
阅读次数:
201
KMP是字符串匹配的经典算法 也是众多字符串基础的重中之重 A. 题意:给T组数据,每组有长度为n和m的母串和模式串。判断模式串是否是母串的子串,如果是输出最先匹配完成的位置,否则输出-1. 做法:直接套用模板。把char改成int。kmp函数中在模式串遍历到结尾的时候return,若没遍历到结尾, ...
分类:
编程语言 时间:
2018-09-13 01:13:38
阅读次数:
195
KMP算法,又称作“看猫片”算法(误),是一种改进的字符串模式匹配算法,可以在O(n+m)的时间复杂度以内完成字符串的匹配操作,其核心思想在于:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经得到的“部分匹配”,将模式串尽可能多地向右“滑动”一段距离,然后继续比较。 KMP(看猫 ...
分类:
编程语言 时间:
2018-09-09 16:50:47
阅读次数:
316
1、基本概念: 目标串:s 模式串:t 模式串第 j 个元素 :t[j] 2、BF算法: 通过将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种 ...
分类:
编程语言 时间:
2018-09-02 01:48:15
阅读次数:
188
传送门1(简单版) 传送门2(增强版) AC自动机……(至于自动机是啥我也看不懂……请自行百度) AC自动机简单来说可以被看成是trie树和KMP算法的结合体,它的用途主要是多模匹配,就是给你一个文本串和多个模式串,询问你诸如:有多少个模式串在文本串中出现过,或是什么模式串在文本串中出现了多少次之类 ...
分类:
其他好文 时间:
2018-08-30 01:56:34
阅读次数:
172
字符串匹配中经常会用到KMP算法。它求解的问题类型是:字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 我们一般的做法是:将一个字符串(长度为n,模式串)放在另一个字符串(长度为m,主串)开始的位置,然后依次比较,如果有不匹配的字符,就将字符串往后移 ...
分类:
编程语言 时间:
2018-08-25 18:44:00
阅读次数:
168
题目描述 给定一个文本串和多个模式串,求有几个模式串出现在文本串中 cpp include include include define MAXN 1000005 char s[MAXN]; int N; struct queue{ int que[MAXN];int head,tail; queu ...
分类:
其他好文 时间:
2018-08-19 01:04:05
阅读次数:
161
题目描述 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z的大写字母。 Alice希望知道,有多少对结点<u,v>满足T上从u到V的最短路径形成的字符串可以由模式串S重复若干次得到? 这里结点对<u,v>是有 ...
分类:
其他好文 时间:
2018-08-17 13:50:50
阅读次数:
168
(一)获取模式串T的next数组值 1.回顾 我们所知道的KMP算法next数组的作用 而KMP算法的next求值函数 2.思考 3.下面我们尝试获取下面的T串的所有next值,从中找到关联 步骤一:由上一篇博文可以知道前j1,j2前两个的next是固定值为0,1 步骤二:获取j=3时的next,此 ...
分类:
编程语言 时间:
2018-08-10 21:33:58
阅读次数:
184