PAT-A-1040 Longest Symmetric String (25 分) 动态规划求最长对称字串 C++题解
2019-08-20 14:50
477 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jal517486222/article/details/99840793
1040 Longest Symmetric String (25 分)
题目传送门:1040 Longest Symmetric String (25 分)
一、题目大意
求字符串的最大对称子串的长度
二、解题思路
这道题可以用动态规划来处理,转移方程为:
dp[i]=dp[i−1]+2,当s[i]==s[i−1]dp[i] = dp[i-1] + 2, 当s[i] == s[i-1]dp[i]=dp[i−1]+2,当s[i]==s[i−1]
dp[i]=1,当s[i]!=s[i−1]dp[i] =1, 当s[i] != s[i-1]dp[i]=1,当s[i]!=s[i−1]
dp[i]是表示以i结尾的回文字串的长度。如果i-dp[i-1]-1位置的字符与i位置的字符相同,则表示以i-1结尾的回文串可以左右各扩大一位。但是,此处有一个坑,就是当出现连续相同的字串时,此转移方程会有问题,比如说,虽然此时s[i-dp[i-1]-1]可能不等于s[i],但此时dpi[i]未必等于1,如果dp[i]可以等于最长的连续与s[i]相同的字串的长度。我们可以用数组same记录i处连续相同的s[i]的长度。
赠送样例:
- input:
123
1223
12223
122223
1222223
12221
1222
1
12
11211
121
11
- output:
1
2
3
4
5
5
3
1
1
5
3
2
三、AC代码
#include<bits/stdc++.h> using namespace std; int main(){ string s; while(getline(cin, s)) { vector<int>dp(s.size(), 1), same(s.size(), 1); for(int i = 1; i < s.size(); i++){ if(s[i] == s[i-1]){ same[i] = same[i-1] + 1; } int j = i - dp[i-1] - 1; if(j >= 0 and s[j] == s[i]){ dp[i] = dp[i-1] + 2; }else{ dp[i] = same[i]; // 关键部分 } } cout << *max_element(dp.begin(), dp.end()) << endl; } }
相关文章推荐
- PAT (Advanced Level) Practise 1040 Longest Symmetric String (25)
- PAT 甲级 1040 Longest Symmetric String (25 分)
- PAT (Advanced Level) Practise 1040 Longest Symmetric String (25)
- PAT 1051 Longest Symmetric String (25)(对称字符串)
- pat1040 Longest Symmetric String
- pat 1040 Longest Symmetric String
- PAT1040:Longest Symmetric String
- PAT1040 Longest Symmetric String
- [字符串]PAT1040 Longest Symmetric String
- PAT 1040 Longest Symmetric String
- PAT 1040 Longest Symmetric String
- Pat(Advanced Level)Practice--1040(Longest Symmetric String)
- 1040 Longest Symmetric String (25 分)
- PAT-A-1071 Speech Patterns (25 分) 字符串处理,transform、istringstream的使用 C++题解
- 1040. Longest Symmetric String (25)
- PAT_1040: Longest Symmetric String
- A1040 Longest Symmetric String(最大回文子串)
- PAT-A-1096 Consecutive Factors (20 分)最长连续因子 C++题解
- Longest Symmetric String (25) 与Manacher算法
- 1040. Longest Symmetric String