解题思路

本题属于最长回文子串专题下。与之前的LISLCS的动规有两个较大的不同

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 需再做相关推荐

  1. 1040. Longest Symmetric String (25)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1040 题目: 1040. Longest Symmetric String (25) 时间限制 ...

  2. 1040 Longest Symmetric String

    1040 Longest Symmetric String (25 分) Given a string, you are supposed to output the length of the lo ...

  3. PAT 甲级 1040 Longest Symmetric String

    1040 Longest Symmetric String 题目大意:给出一个字符串,求出最长的回文子串的长度 思路:从第一个字符开始往后遍历,每次遍历第一个字符不动,从下一个字符开始找起,若是有回文 ...

  4. PAT 1040 Longest Symmetric String (25)

    1040 Longest Symmetric String (25)(25 分) Given a string, you are supposed to output the length of th ...

  5. 1040 Longest Symmetric String (25 分)_15行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a string, you are supposed to output the length of the long ...

  6. 1040. Longest Symmetric String (25)-PAT甲级真题

    Given a string, you are supposed to output the length of the longest symmetric sub-string. For examp ...

  7. 1040 Longest Symmetric String

    Given a string, you are supposed to output the length of the longest symmetric sub-string. For examp ...

  8. 1040 Longest Symmetric String (25 分)【难度: 一般 / 知识点: 最长回文子串】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 方法一: 最朴素的做法, 枚举所有的子串 # ...

  9. 浙大pat1040 Longest Symmetric String(25 分)

    1040 Longest Symmetric String(25 分) Given a string, you are supposed to output the length of the lon ...

最新文章

  1. linux c 遍历目录 及 目录下文件
  2. oracle23290,oracle标题
  3. python螺旋打印二维数组_Python使用迭代器打印螺旋矩阵的思路及代码示例
  4. UVa 11825 (状压DP) Hackers' Crackdown
  5. jquery程序 windows移植到linux显示不了,windows程序移植linux
  6. boost bind使用指南
  7. WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...
  8. 基于DGCNN和概率图的轻量级信息抽取模型
  9. activeMQ发送与接受消息模板代码
  10. zabbix mysql脚本_zabbix监控mysql脚本
  11. ASP.NET高级配置Web.config和Machine.Config
  12. EL表达式取Map,List值的总结
  13. win10禁用计算机维护,win10哪些服务可以禁用 服务哪些可以禁止启动
  14. 「leetcode」203.移除链表元素:听说用虚拟头节点会方便很多?
  15. 同质化代币和非同质化代币 区别对比
  16. mac 系统下 刻录centos 系统到 U盘中
  17. [Spring]04_最小化Spring XML配置
  18. 诺基亚9300手机开发的有关资料
  19. 用matlab画企鹅代码,CDR绘制超级可爱的QQ企鹅
  20. 运维面试题(面前准备)

热门文章

  1. 5- RAC 集合 RACTuple RACSequence
  2. 运用jieba库分词
  3. 实战:使用Telnet排除网络故障
  4. P1214 等差数列
  5. 波士顿房价预测学习项目笔记
  6. Add Digits
  7. Unix_Linux系统定时器的应用(案例)
  8. string与数值之间的转换
  9. 线性表之顺序表(C语言实现)
  10. VS 2010中对WPF4有哪些多点触摸支持?