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的更多相关文章

  1. PAT (Advanced Level) 1040. Longest Symmetric String (25)

    暴力. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ]; ...

  2. 1040. Longest Symmetric String (25)

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

  3. PAT 1040 Longest Symmetric String[dp][难]

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

  4. PAT 甲级 1040 Longest Symmetric String (25 分)(字符串最长对称字串,遍历)

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

  5. PAT 甲级 1040 Longest Symmetric String

    https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...

  6. 1040 Longest Symmetric String (25分)(dp)

    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. PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  9. PAT 1040 Longest Symmetric String

    #include <cstdio> #include <cstdlib> using namespace std; ]; ]; int syslen(char str[], i ...

随机推荐

  1. c#格式化字符

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  2. 利用InfoPath实现SharePoint Server 2013列表的级联选择(Cascading Drop Down List)

    最近在利用SharePoint Server 2013的列表组织和存储数据,发现SharePoint列表原始不支持级联选择的功能. 谷歌百度一通以后,发现了很多通过代码实现的方案,利用第三方的插件sp ...

  3. Hibernate 之单向多对一映射及其衍生问题

    由于在数据表之间可以通过外键进行关联,在使用Hibernate操作映射到存在关联关系的数据表的对象时,需要将对象的关联关系与数据表的外键关联进行映射. 首先建立hibernate.cfg.xml和会话 ...

  4. Buffer Pool--数据库内存结构

    数据库从操作系统申请到的内存可分为两部分:1.缓存池内存(数据页和空闲页)2.非缓存池内存(线程/DLL/连接服务器等) Note:通过服务器实例属性设置的最大/最小服务器内存是指缓存池内存Note: ...

  5. docker怎么导出导入镜像

    https://blog.csdn.net/dest_dest/article/details/80612231 把某个docker镜像保存到本地文件,命令如下docker save -o 镜像名.t ...

  6. c#中sealed修饰符

    sealed 修饰符表示密封 用法: 1.用于类时,表示该类不能再被继承,不能和abstract同时使用,因为这两个修饰符在含义上互相排斥 2.用于方法和属性时,表示该方法或属性不能再被重写,必须和o ...

  7. 纸壳CMS 3.0升级.Net Core 2.1性能大提升

    微软发布了.Net Core 2.1正式版,纸壳CMS也在第一时间做了升级,并做了一系列的优化和调整,性能大幅提升,并解决了一些历史遗留问题,添加了一些新功能. Github https://gith ...

  8. MvvmLight框架使用入门(二)

    上一篇我们简单对MvvmLight做了介绍.罗列了三个DLL中,各个命名空间下主要类的定义及大致作用.因为只是范范的概论,对于从未接触过MvvmLight的萌新来说,根本就是在晃点他们.不过万事开头难 ...

  9. PHP一句话木马Webshell变形免杀总结

    0×00 前言 大部分Webshell查杀工具都是基于关键字特征的,通常他们会维护一个关键字列表,以此遍历指定扩展名的文件来进行扫描,所以可能最先想到的是各种字符串变形,下面总结了一些小的方法,各种不 ...

  10. [Swift]数学库函数math.h | math.h -- mathematical library function

    常用数学函数 1. 三角函数 double sin (double);//正弦 double cos (double);//余弦 double tan (double);//正切 2 .反三角函数 d ...