摘要: 这个比最长回文子串就多了一个条件,就是回文字串(这里相当于人的高度)由两端向中间递增。才刚刚看了看manacher,在用模板A了一道题后,还没有完全理解manacher,然后就准备把这道题也直接带模板的。却发现这个递增的要求实在是麻烦,然后实在是没办法了,就把manacher算法拆开了,写两遍,按照子串的中间是一个数还是两个数来写。其他的什么地方都没改,只是扩展的时候把题目要求的条件加上就好了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #i... 阅读全文
posted @ 2014-03-25 13:14 再见~雨泉 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 题目大意就是说在给定的字符串里找出一个长度最大的回文子串。才开始接触到manacher,不过这个算法的确很强大,这里转载了一篇有关manacher算法的讲解,可以去看看:地址神器: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std;15 #define INF 0x3f3f3f3f16 #de... 阅读全文
posted @ 2014-03-25 12:59 再见~雨泉 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 原网址:http://blog.sina.com.cn/s/blog_70811e1a01014esn.htmlmanacher算法是我在网上无意中找到的,主要是用来求某个字符串的最长回文子串.不过网上的版本还不太成熟,我就修改了下.不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复杂度为O(n).求最长回文子串这个问题,我听说有个分治+拓展kmp的算法,不过我估计后缀数组也可以.但杀鸡岂能用牛刀?现在进入正题:首先,在字符串s中,用rad[i]表示第i个字符的回文半径,即rad[i]尽可能大,且满足:s[i-rad[i],i-1]=s[i+1, 阅读全文
posted @ 2014-03-25 12:56 再见~雨泉 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 开始做字符串专题,地址第一题水题,暴力就可以做 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std;15 #define INF 0x3f3f3f3f16 #define inf (-((LL)1 T CMP_MIN(T a, T b) { return a T CMP_MAX(T a, T ... 阅读全文
posted @ 2014-03-25 12:50 再见~雨泉 阅读(128) 评论(0) 推荐(0) 编辑