PTA (Advanced Level) 1040 Longest Symmetric String
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
解题思路:
  本题给出一行字符这里记为text,要求输出改行字符中最大回文串的长度。这里采用动态规划做法,用布尔数组dp[ bg ][ ed ]记录下标 bg ~ ed 组成的子串是否为回文串。设长度为1的字符串为回文串,在初始化dp数组是可以将长度为1与长度为2的字符串是否为回文串都标记完成。
对任意一个字符串都有两种情况:
1、是回文串,其对应dp为true;
2、不是回文串,其对应dp为false;
判断一个字符串是否为回文串只需要判断其首尾字符是否相等与其除首尾字符外的子串是否为回文串即可,这就转化为了求dp[bg + 1][ ed - 1],和判断text[ bg ]与text[ ed ]是否相等的问题。
动态转移方程:dp[bg][ed] = 1(text[ bg ] == text[ ed ],dp[bg + 1][ ed - 1 ] == true)
之后只要遍历所有子串长度,遍历所有起始下标,并计根据其实下标与子串长度计算出末尾下标,根据动态转移方程即可求出答案。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+;
bool dp[maxn][maxn] = {false}; //默认所有字符串都不是回文
string text; //text为出入的字符串
int main()
{
getline(cin, text);
int len = text.size();
int ans = ;
for(int i = ; i < len; i++){
dp[i][i] = true; //标记长度为1的字符串为回文串
ans = ; //最大回文串长度为1
if(i < len - && text[i] == text[i + ]){ //如果有两个连续字符
//(长度为2的回文串只有两个连续字符这种情况)
dp[i][i + ] = ; //标记其组成的字符串为回文串
ans = ; //最大回文串长度为2
}
}
for(int tempLen = ; tempLen <= len; tempLen++){ //遍历子串长度长度从3 ~ len的
for(int bg = ; bg + tempLen - < len; bg++){
//遍历起始位置,末尾下标为起始位置+当前子串长度-1,末尾下标不能达到给定字符串末位
int ed = bg + tempLen - ;
if(text[bg] == text[ed] && dp[bg + ][ed - ] == true){ //动态转移方程
dp[bg][ed] = ;
ans = tempLen; //记录答案
}
}
}
printf("%d\n", ans);
return ;
}
PTA (Advanced Level) 1040 Longest Symmetric String的更多相关文章
- PAT (Advanced Level) 1040. Longest Symmetric String (25)
		暴力. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ]; ... 
- 1040. Longest Symmetric String (25)
		题目链接:http://www.patest.cn/contests/pat-a-practise/1040 题目: 1040. Longest Symmetric String (25) 时间限制 ... 
- PAT 1040 Longest Symmetric String[dp][难]
		1040 Longest Symmetric String (25)(25 分) Given a string, you are supposed to output the length of th ... 
- PAT 甲级 1040 Longest Symmetric String (25 分)(字符串最长对称字串,遍历)
		1040 Longest Symmetric String (25 分) Given a string, you are supposed to output the length of the ... 
- PAT 甲级 1040 Longest Symmetric String
		https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ... 
- 1040 Longest Symmetric String (25分)(dp)
		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 ... 
- PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串
		博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ... 
- PAT 1040 Longest Symmetric String
		#include <cstdio> #include <cstdlib> using namespace std; ]; ]; int syslen(char str[], i ... 
随机推荐
- CentOS 7上搭建Docker环境
			一.Docker介绍和安装 http://linux.cn/article-4340-1.html Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机 ... 
- pycharm中安装可以贴图片的Markdown插件
			方法一:(测试成功) 先安装官方推荐的Markdown support插件,再安装Paste images into MarkDown 如果Paste images into MarkDown插件在线 ... 
- NativeScript的开发体会
			上个月开始,国内的主流技术网站开始在推荐NativeScrpit,"js+xml写跨终端app"."原生体验挡不住",很多网站都拿这个当做宣传NativeScr ... 
- ssl协议,openssl,创建私有CA
			SSL是Security Socket Layer:安全的套接字层 他介于HTTP和TCP协议层之间 SSL是Netscape公司开发的,属于个人 TLS是标准委员会制定的 OpenSSL是SSL的开 ... 
- html中事件调用JavaScript函数时有return与没有return的区别
			JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ... 
- java 基础解析
			http://www.cnblogs.com/-new/tag/java%E5%9F%BA%E7%A1%80%E8%A7%A3%E6%9E%90/ 
- Android intent 传值不更新的原因和解决办法
			当 Activity 的启动模式是 singleTask 或者 singleInstance 的时候.如果使用了 intent 传值,则可能出现 intent 的值无法更新的问题.也就是说每次 int ... 
- MVC框架入门准备(三)事件类 - 事件的监听和触发
			在mvc框架中可以看到事件类,实现事件的监听和触发. 举例: <?php /** * 事件类 */ class Event { // 事件绑定记录 private static $events; ... 
- [Objective-C语言教程]扩展(30)
			类扩展与类别有一些相似之处,但它只能添加到编译时具有源代码的类中(类与类扩展同时编译). 类扩展声明的方法是在原始类的实现块中实现的,因此不能在框架类上声明类扩展,例如Cocoa或Cocoa Touc ... 
- centos和ubuntu的网络属性配置
			一. centos的网络配置 1. 修改 /etc/sysconfig/network-scripts/ifcfg-IFACE: DEVICE:此配置文件应用到 ... 
