题目链接:http://poj.org/problem?id=3376 题目大意:给你n个字符串,这n个字符串可以两两组合形成n*n个字符串,求这些字符串中有几个是回文串. 解题思路:思路参考了这里:http://blog.csdn.net/qq_30241305/article/details/50718051 做法:首先由两个字符串A,B.要使它们能组成回文串有三种情况 情况① :alen < blen abc abacba abcaba  A               B RB 如上所示…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意: 大意就是将字符串s分成两部分子串,若子串是回文串则需计算价值,否则价值为0,求分割字符串s能获得的最大价值. 解题思路:将原串s反转得到rs,然后进行rs,s扩展KMP匹配,得到extend,对于s1的前i个字符如果和s2的后i个字符相等即extend[len-i] == i则前i个字符为回文串: 同理,判断后len-i个字符是否是回文串用s,rs进行扩展KMP再生成一个exte…
题意 给n个字符串,两两拼接,问拼接后的\(n\times n\)个字符串中有多少个回文串. 分析 将所有正串插入字典树中,马拉车跑出所有串哪些前缀和后缀为回文串,记录位置,用反串去字典树中查询,两字符串拼成回文串有三种情况: 未匹配完,反串后缀是回文串. 匹配结束,正串后缀是回文串. 匹配结束,正串等于反串. 字典树中维护当前位置有多少正串和当前位置有多少后缀为回文串的正串. Code #include<cstring> #include<cstdio> #include<…
很不错的一个题(注意string会超时) 题意:给你n串字符串,问你两两匹配形成n*n串字符串中有多少个回文串 题解:我们首先需要想到多串字符串存储需要trie树(关键),然后我们正序插入倒序匹配就可以O(len)找到回文串个数了. 但是如果每次直接查询到结尾的话会漏掉两种情况 如:  1:a 与 ba 匹配(使用的是ab去匹配a) 2:ab 与 a 匹配 对于2这种情况我们需要在trie树记录每个字符串每个后缀可以形成回文串的个数(建树时就维护),对于1我们则需在匹配时看查询串每个后缀是否形成…
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复杂度为O(n). 求最长回文子串这个问题,我听说有个分治+拓展kmp的算法,后缀数组也可以. 但是对于求回文串来说,manacher算法肯定有很多其他算法没有的优点. 现在进入正题: 首先,在字符串s中,用rad[i]表示第i个字符的回文半径,即rad[i]尽可能大,且满足: s[i-rad[i],…
I - O'My! Gym - 101350I Note: this is a harder version of Mirrored string I. The gorillas have recently discovered that the image on the surface of the water is actually a reflection of themselves. So, the next thing for them to discover is mirrored…
Finding Palindromes http://poj.org/problem?id=3376 Time Limit: 10000MS   Memory Limit: 262144K       Case Time Limit: 2000MS Description A word is called a palindrome if we read from right to left is as same as we read from left to right. For example…
题目链接:http://poj.org/problem?id=3376 题意:给你n个字符串m1.m2.m3...mn 求S = mimj(1=<i,j<=n)是回文串的数量 思路:我们考虑第i个字符串和第j个字符串能构成组合回文串要满足的条件: 1.i的长度小于j,那么i一定是j的反串的前缀,且j的反串剩下的后缀是回文串 2.i的长度等于j,那么i等于j的反串 3.i的长度大于j,那么j的反串一定是i的前缀,且i串剩下的后缀是回文串 我们可以将这n个字符串插入trie,每个节点要维护两个值:…
传送门:POJ - 3376 题意:给你n个字符串,两两结合,问有多少个是回文的: 题解:这个题真的恶心,我直接经历了5种错误类型 : ) ... 因为卡内存,所以又把字典树改成了指针版本的. 字符串s与字符串t组合是回文串的情况 1. len(s) > len(t), t的反串是 s 的前缀,且s剩下的部分是回文串 (比如s: abbcb  t: ba 2. len(s) = len(t), s = t 的反串(比如s: abc  t: cba 3. len(s) < len(t), s 是…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意: 题目大意就是将字符串s分成两部分子串,若子串是回文串则需计算价值,否则价值为0,求分割字符串s能获得的最大价值. 解题思路: 用manacher算法计算出p[i],每次计算p[i]是顺便计算一下这段回文串是否能到达边界,若能则计算出前缀或者后缀的结束位置,标记起来.//还有之前数组开1e6+5教C++是错的,改成2e6+5就对了,不觉明历.... 代码(复杂点的) #include…