
KMP
HumveeA6
这个作者很懒,什么都没留下…
展开
-
URAL - 1423
一个很显然的思路就是,把串1复制一遍接在自己后面,然后将串2作为模式串,串1作目标串去匹配,如果匹配到就可以输出次数。唯一的坑点在于如果两个串原来就是相等的,那么一定要注意输出0…..#include<cstdio>#include<iostream>#include<algorithm>#include<string>using n...原创 2018-04-01 20:27:27 · 315 阅读 · 0 评论 -
HDU3336
看到题目的第一反应是:这不是AC自动机模板么…每次截取子串然后添加到trie树中,然后跑一遍匹配即可…然后妥妥tle了…正解应该基于这样的考虑:在kmp算法中,我们的next数组其实是对应了模式串在当前位置能否在之前的位置中找到与当前后缀相同的前缀字符串,那么如果当前位置对应的next不是0的话,就说明前缀字符串在当前位置找到了一个匹配,也就是题目中的要求;因此,其实统计一遍next即可; 但是...原创 2018-04-02 17:37:56 · 399 阅读 · 0 评论 -
(模板)KMP算法
写了几种版本,首先是string版的。string大法吼哇!!! 这里的next1[i]指的是在0~i-1构成的字符串中有多大长度的相同前缀后缀,同时也是模式串str2[i]匹配失败后跳转到的位置。同时值得注意的是这里的字符串是从0开始的#include<cstdio>#include<iostream>#include<cstring>#inc...原创 2018-03-27 19:59:44 · 162 阅读 · 0 评论 -
(模板)扩展KMP算法
#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;/* 求解T中next[],注释参考GetExtend() */void GetNext(string T, int next1[]){ int t_len = T.size(); next1[0] = t_len; int a;...原创 2018-05-23 21:07:52 · 235 阅读 · 0 评论