
扩展KMP
文章平均质量分 84
maze_illusion
这个作者很懒,什么都没留下…
展开
-
HDU 2594 扩展KMP
题目链接题意:给两个字符串s1,s2,求s1的前缀和s2的后缀最长相等长度,并将相等部分输出。思路:扩展KMP解决的经典问题:定义母串S和子串T,求T与S的每一个后缀的最长公共前缀。应用到此题将s1作为子串,s2作为母串进行扩展KMP求解,取最长的公共前缀且在s2中为后缀的答案。C++代码:#include<bits/stdc++.h>using namespace std;con...原创 2018-07-11 10:12:31 · 321 阅读 · 0 评论 -
HDU 3613 扩展KMP
题目链接题意:给一个字符串S,将字符串S分成两段,每段字符串如果是回文则获得该段字符串的价值和如果不是回文则此段字符串价值为0。求分割字符串可以获得的最大价值。思路:定义字符串T为字符串S的逆序串,比如S:abcaaa T:aaacba以S为母串T为子串求解扩展KMP,可以发现若Ex1[i]+i==len则S[i,...,len-1]是一个回文串以T为母串S为子串求解扩展KMP,可以发现若Ex2[...原创 2018-07-11 13:40:18 · 146 阅读 · 0 评论 -
HDU 4333 扩展KMP
题目链接题意:给一个特大数字长度<=100000,现在依次将最后一位数字放置在第一位,求这些数字中比初始数字小的有多少个,相等的有多少个,大的有多少个(数字不可以重复)。思路:对原字符串进行倍增后作为母串S,原字符串作为子串T,进行扩展KMP处理。对于Ex[i]==len的位置说明以此处为初始的字符串与原串相等,当Ex[i]<len时我们只需比较S[i+Ex[i]]与T[Ex[i]]即...原创 2018-07-11 14:43:26 · 120 阅读 · 0 评论 -
HDU 6153 扩展KMP
题目链接题意:给定母串S和子串T,在母串中找子串的所有后缀匹配次数乘于其对应的出现次数,最终将结果加起来输出。思路:同时翻转母串S和子串T,这样子匹配后缀就变为匹配前缀。匹配前缀就可以使用扩展KMP,最终将Ex[i]*(Ex[i]+1)/2求和就是答案。C++代码:#include<bits/stdc++.h>using namespace std;const int maxn =...原创 2018-07-11 16:28:07 · 148 阅读 · 0 评论 -
HDU 4763 扩展KMP
题目链接题意:给定字符串S,求格式为ABACA的字符串分割(A,B,C皆为S的子串)A的最长长度。思路:ABACA格式:说明分割方法要使得前缀同后缀相同并能在前后缀部分外找到与前后缀相同的子串。以S为母串S为子串进行扩展KMP处理后,如果能找到某点的Ex[i]+i==len说明我们找到了一个相同的前后缀。注意Ex[i]的意义:S[i,...,n-1]同S的最长公共前缀。所以当我们找到一个Ex[i]...原创 2018-07-11 19:33:44 · 228 阅读 · 0 评论 -
HDU 4300 扩展KMP
题目链接题意:给两个字符串,第一个字符串是表示明文转密文转换方式,第二个字符串是密文和明文综合体,密文一定完整明文可能缺失,现在要求将缺失部分的明文复原且使得复原的字符串尽量短。思路:考虑明密文匹配可以发现问题实际上就是一个前后缀匹配问题。将字符串S全部视为明文以明文转密文的形式转化成字符串T,以T为母串(想要T的后缀)S为子串(想要S的前缀)进行扩展KMP匹配。C++代码:#include<...原创 2018-07-11 20:34:19 · 242 阅读 · 0 评论 -
POJ 3376 扩展KMP+Trie树
题目链接题意:给定n个字符串,这些字符串可以进行拼接(前后拼接共n*n种拼接情况),求拼接后为回文串的情况数。思路:先举个两串拼接的例子:A串(aaabaa)B串(baaa)A串拼B串(aaabaabaaa)B串拼A串(baaaaaabaa)明显可以看出A串拼B串是一个回文串而B串拼A串不是一个回文串。可以发现若两串相拼为回文串,则后半部分字符串的反串的前缀是和前半部分字符串的前缀是完全相同的且相...原创 2018-07-12 10:34:16 · 379 阅读 · 0 评论