1040 Longest Symmetric String 需再做
解题思路
本题属于最长回文子串专题下。与之前的LIS和LCS的动规有两个较大的不同
1. 虽然最后也是要求长度,但是长度信息不再蕴含在dp数组当中,dp[i][j]表示的仅仅是从s[i]起s[j]止这一段是否是回文,所以为了提醒自己,我设置成了布尔型。
bool dp[maxn][maxn] = {0};
2. 动规方程是不难想到的,根据s[i],s[j]是否相同,以及dp[i+1][j-1]是否为1来判断dp[i][j]的值。但是这样从两边向中间逼近的方式,会出现的问题是:中间可能自己还不知道答案呢。。总之用之前的二重循环肯定是完成不了
参考书上给出的思路是,先把所有长度为1和2的dp都给初始化(状态边界)
for(int i=0;i<len;i++){dp[i][i] = 1;//长度为1,一定是if(i<len-1){if(s[i]==s[i+1]){dp[i][i+1] = 1;ans = 2;//更新最长字串长度 }}
}
然后从长度3开始进行状态转移,至于长度的记录,外包给另一个int型变量ans即可
//从长度为3的子串开始进行状态转移
for(int L=3;L<=len;L++){for(int l=0;l+L-1<len;l++){int r = l+L-1;if(s[l]==s[r]&&dp[l+1][r-1]){dp[l][r] = 1;ans = L;}}
}
AC代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;const int INF = 1000000000;//10的9次方
const int maxn = 1010;
const double eps = 1e-3;bool dp[maxn][maxn] = {0};//dp[i][j]表示以第i个字符开头、第j个字符结尾的子串是不是回文滴 int main(){string s;int ans = 1;//已知非空且单独一个字符属于回文 getline(cin,s);int len = s.length();//状态边界是长度为1和2的字符串 for(int i=0;i<len;i++){dp[i][i] = 1;//长度为1,一定是if(i<len-1){if(s[i]==s[i+1]){dp[i][i+1] = 1;ans = 2;//更新最长字串长度 }} }//从长度为3的子串开始进行状态转移for(int L=3;L<=len;L++){for(int l=0;l+L-1<len;l++){int r = l+L-1;if(s[l]==s[r]&&dp[l+1][r-1]){dp[l][r] = 1;ans = L;}}} printf("%d\n",ans);return 0;
}
1040 Longest Symmetric String 需再做相关推荐
- 1040. Longest Symmetric String (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1040 题目: 1040. Longest Symmetric String (25) 时间限制 ...
- 1040 Longest Symmetric String
1040 Longest Symmetric String (25 分) Given a string, you are supposed to output the length of the lo ...
- PAT 甲级 1040 Longest Symmetric String
1040 Longest Symmetric String 题目大意:给出一个字符串,求出最长的回文子串的长度 思路:从第一个字符开始往后遍历,每次遍历第一个字符不动,从下一个字符开始找起,若是有回文 ...
- PAT 1040 Longest Symmetric String (25)
1040 Longest Symmetric String (25)(25 分) Given a string, you are supposed to output the length of th ...
- 1040 Longest Symmetric String (25 分)_15行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a string, you are supposed to output the length of the long ...
- 1040. Longest Symmetric String (25)-PAT甲级真题
Given a string, you are supposed to output the length of the longest symmetric sub-string. For examp ...
- 1040 Longest Symmetric String
Given a string, you are supposed to output the length of the longest symmetric sub-string. For examp ...
- 1040 Longest Symmetric String (25 分)【难度: 一般 / 知识点: 最长回文子串】
https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 方法一: 最朴素的做法, 枚举所有的子串 # ...
- 浙大pat1040 Longest Symmetric String(25 分)
1040 Longest Symmetric String(25 分) Given a string, you are supposed to output the length of the lon ...
最新文章
- linux c 遍历目录 及 目录下文件
- oracle23290,oracle标题
- python螺旋打印二维数组_Python使用迭代器打印螺旋矩阵的思路及代码示例
- UVa 11825 (状压DP) Hackers' Crackdown
- jquery程序 windows移植到linux显示不了,windows程序移植linux
- boost bind使用指南
- WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...
- 基于DGCNN和概率图的轻量级信息抽取模型
- activeMQ发送与接受消息模板代码
- zabbix mysql脚本_zabbix监控mysql脚本
- ASP.NET高级配置Web.config和Machine.Config
- EL表达式取Map,List值的总结
- win10禁用计算机维护,win10哪些服务可以禁用 服务哪些可以禁止启动
- 「leetcode」203.移除链表元素:听说用虚拟头节点会方便很多?
- 同质化代币和非同质化代币 区别对比
- mac 系统下 刻录centos 系统到 U盘中
- [Spring]04_最小化Spring XML配置
- 诺基亚9300手机开发的有关资料
- 用matlab画企鹅代码,CDR绘制超级可爱的QQ企鹅
- 运维面试题(面前准备)