hdu 1544 连续回文子串的个数 构造法
来源:互联网 发布:看相声小品的软件 编辑:程序博客网 时间:2024/05/18 22:14
思路:
子串的长度只能为奇数或偶数(长度为1的不算,直接特判)。
- 对于长度为奇数的子串,以
2 到n 之间的数为该子串的中心,然后分别向两边扩展,只要碰到一个子串扩展不满足回文的,就退出。 - 对于偶数长度的子串分别以1到n - 1之间的数为左,该数右边的数为右,组成两个数,然后再拿这两个数扩展。
代码:
#include <queue>#include <set>#include <map>#include <stack>#include <string>#include <vector>#include <algorithm>#include <cstdio>#include <cstring>#include <iostream> //hdu 1544,using namespace std;typedef long long int LL;const int M = 100009,INF = 0x3fffffff;string str;int n;LL odd(void) { LL o = 0; for(int i = n - 2; i > 0; i--) { for(int j = 1; j <= min(n - i - 1, i); j++) { if(str[i + j] == str[i - j]) o++; else break; } } return o;}LL even(void) { LL e = 0; for(int i = 0; i < n - 1; i++) { for(int j = 0; j <= min(i, n - i - 2); j++) { if(str[i - j] == str[i + j + 1]) e++; else break; } } return e;}int main(void) { while(cin >> str) { //for(int i = 0; i < 5000; i++) str += 'a'; n = str.size(); cout << odd() + even() + n << endl; } return 0;}
0 0
- hdu 1544 连续回文子串的个数 构造法
- hdu 1544 回文子串的个数
- hdu 1544(求回文子串的个数)
- 回文子串的个数
- HDU 1544 Palindromes 回文串的个数
- hdu 4362(dp求非连续回文串的个数)
- 最长连续回文子串
- HDU 4632 Palindrome subsequence(区间DP 回文子串的个数)
- KMP算法求公共回文子串的个数
- poj 2406 kmp求连续重复子串的个数
- 计算字符串中连续出现子串最多的个数
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
- 求奇偶子回文串个数
- hdu 3948 求不同回文串的个数
- hdu 3948 后缀数组统计不同回文串的个数
- 最长回文子串、最长回文子序列、回文子序列个数
- 最长公共子串、最长公共子序列、最长回文子串、最长回文子序列、回文子串个数
- 最长回文子序列+最长公共子序列+最长连续回文子串
- WEB架构师成长系列索引
- 关于RGB屏调试的一些知识
- initWithNibName与一般init的区别
- Python字符串的大小写转换
- Image Sensor vs Camera
- hdu 1544 连续回文子串的个数 构造法
- PageAdmin CMS:移动互联网时代的网站建设利器
- 改进标准c函数——mencpy()
- 类型java.lang.charsequence不能解决。
- 三分钟教你学Git(十五) - 搜索
- 怎么用转换器将PDF转换成word文档
- HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
- Isomorphic Strings
- Android之SlidingMenu