1040. Longest Symmetric String (25)-PAT甲级真题
来源:互联网 发布:上海淘宝设计速成班 编辑:程序博客网 时间:2024/05/21 16:52
1040. Longest Symmetric String (25)
Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given “Is PAT&TAP symmetric?”, the longest symmetric sub-string is “s PAT&TAP s”, hence you must output 11.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
Sample Input:
Is PAT&TAP symmetric?
Sample Output:
11
分析:
dp[i][j]
表示s[i]到s[j]所表示的字串是否是回文字串。只有0和1- 递推方程:
- 当s[i] == s[j] :
dp[i][j] = dp[i+1][j-1]
- 当s[i] != s[j] :
dp[i][j] =0
- 边界:
dp[i][j] = 1, dp[i][i+1] = (s[i] == s[i+1]) ? 1 : 0
- 当s[i] == s[j] :
- 因为i、j如果从小到大的顺序来枚举的话,无法保证更新
dp[i][j]
的时候dp[i+1][j-1]
已经被计算过。因此不妨考虑按照字串的长度和子串的初试位置进行枚举,即第一遍将长度为3的子串的dp的值全部求出,第二遍通过第一遍结果计算出长度为4的子串的dp的值...这样就可以避免状态无法转移的问题 - 首先初始化dp[i][i] = 1, dp[i][i+1],把长度为1和2的都初始化好,然后从L = 3开始一直到 L <= len 根据动态规划的递归方程来判断
#include <iostream>using namespace std;int dp[1010][1010];int main() { string s; getline(cin, s); int len = s.length(), ans = 1; for(int i = 0; i < len; i++) { dp[i][i] = 1; if(i < len - 1 && s[i] == s[i+1]) { dp[i][i+1] = 1; ans = 2; } } for(int L = 3; L <= len; L++) { for(int i = 0; i + L - 1 < len; i++) { int j = i + L -1; if(s[i] == s[j] && dp[i+1][j-1] == 1) { dp[i][j] = 1; ans = L; } } } printf("%d", ans); return 0;}
0 0
- 1040. Longest Symmetric String (25)-PAT甲级真题
- 【PAT甲级】1040. Longest Symmetric String (25)
- PAT甲级1040. Longest Symmetric String (25)
- PAT 甲级 1040. Longest Symmetric String (25)
- PAT甲级 1040. Longest Symmetric String (25)
- PAT甲级练习1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- PAT A 1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- pat 1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- 【PAT】1040. Longest Symmetric String (25)
- pat 1040. Longest Symmetric String (25)
- PAT-A-1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String (25)
- PAT 1040. Longest Symmetric String
- 引用的知识
- L2-008. 最长对称子串-PAT团体程序设计天梯赛GPLT
- BestCoder Round #86 HDU 5804,HDU 5805,HDU 5806,HDU 5807
- 相差超过一个小时的数据
- ReactJS修炼之路(四):组件的性能优化及开发思路
- 1040. Longest Symmetric String (25)-PAT甲级真题
- 为什么in值列表不能拼'CLARK','KING','MILLER','SCOTT'
- 脚本语言对比学习随笔
- 必须把这20篇速度搞定,然后我早早睡觉。 早早休息。 休息好了,做事情就更好了。
- 常用的linux命令-ss命令
- 轻松网络赚钱三步走
- 如何利用电子书日赚50元
- 零成本提升利润的秘密
- Intent之复杂数据的传递