输入一个字符串Str,输出Str里最长回文子串的长度。

回文串:指aba、abba、cccbccc、aaaa这种左右对称的字符串。

串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符)串
例如 abc 这个串的子串:空串、a、b、c、ab、ac、bc、abc

收起

 

输入

输入Str(Str的长度 <= 1000)

输出

输出最长回文子串的长度L。

输入样例

daabaac

输出样例

5

----------------------------------------------------------------------------------------------------------
可以用dp[i][j]来表示S[i]到S[j]所表示的子串是否是回文子串,此处要分两种情况讨论:
1)如果S[i] == S[j],那么如果dp[i+1][j-1]是1,那就是回文子串,令dp[i][j]为1(dp[i][j]为1表示为回文子串,否则为0为不是回文子串)。
2)如果S[i] != S[j],那么令dp[i][j]=0,因为一定不是回文子串。
另外,面对边界的问题,dp[i][i]一定是回文子串,毕竟单个字母一定是回文的。dp[i][i+1]中,如果S[i] == S[i+1],就是回文子串,否则不为回文子串,此处判断两个字母是否构成回文子串。
C++代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn = ;
char str[maxn];
int dp[maxn][maxn];
int main() {
cin >> str;
int len = strlen(str);
int ans = ;
for (int i = ; i < len; i++) {
dp[i][i] = ;
if (str[i] == str[i + ]) {
dp[i][i + ] = ;
ans = ;
}
else {
dp[i][i + ] = ;
}
}
int j;
for (int L = ; L < len; L++) {
for (int i = ; i + L - < len; i++) {
j = i + L - ;
if (str[i] == str[j] && dp[i + ][j - ]) {
dp[i][j] = ;
ans = L;
}
}
}
cout << ans << endl;
system("pause");
return ;
}

(最长回文子串 线性DP) 51nod 1088 最长回文子串的更多相关文章

  1. 51nod 1088 最长回文子串 【中心拓展法/输出长度和路径】

    1088 最长回文子串 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字 ...

  2. 51nod 1088 最长回文子串

    1088 最长回文子串 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一 ...

  3. FatMouse's Speed HDU - 1160 最长上升序列, 线性DP

    #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> usi ...

  4. 51NOD 1088 最长回文子串&1089 最长回文子串 V2(Manacher算法)

    回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. Input 输入Str(Str的长度 <= 1000(第二题要 ...

  5. 回文词——线性dp

    #include<iostream> #include<cstdio> using namespace std; int n,f[5002][5002]; char str1[ ...

  6. 牛客网 Wannafly挑战赛12 删除子串(线性dp)

    题目描述 给你一个长度为n且由a和b组成的字符串,你可以删除其中任意的部分(可以不删),使得删除后的子串“变化”次数小于等于m次且最长. 变化:如果a[i]!=a[i+1]则为一次变化.(且新的字符串 ...

  7. NYOJ17 最长单调递增子序列 线性dp

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17 分析: i=1 dp[i]=1 i!=1 dp[i]=max(dp[j]+1) ...

  8. LG2679 「NOIP2015」子串 线性DP

    问题描述 LG2679 题解 设\(opt[i][j]\)代表A串前\(i\)个,匹配\(B\)串前\(j\)个,选择了\(k\)个子串的方案数. 转移用前缀和优化一下. \(\mathrm{Code ...

  9. 【基础练习】【线性DP】codevs1576 最长严格上升子序列题解

    连题目都不放了,就是标题中说的那样.裸题 于是直接上代码 暑假要来了 好好学习 --炉火照天地,红星乱紫烟. 赧郎明月夜.歌曲动寒川.

随机推荐

  1. Python——Flask框架——数据库

    一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...

  2. name设置id的方式 解决多个单选域冲突现象 同时有利于从动态网页取值

  3. 数据库MySQL5.7.21win64位安装配置

    1,在MySQL官网下载mysql对应版本 https://dev.mysql.com/downloads/mysql/ 2,解压压缩文件到想要的位置 3,配置环境 打开  右键我的电脑-->属 ...

  4. BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图

    题目描述 Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无 ...

  5. 【NOIP2018 Day1】题解

    T3 rp++; 今天题比较简单 而且考了很多嫌疑原题? 大家基本250+ 本蒟蒻...T3十分看脸 再次祝rp++; T1 积木大赛本赛嘛 如果d[i] < d[i - 1] ans += d ...

  6. [luogu1337][bzoj3680][JSOI2004]平衡点 / 吊打XXX【模拟退火】

    题目描述 gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞.这n根绳子有 ...

  7. kvm 虚拟机XML文件

    <domain type='kvm' id='29'> //domain 是一个所有虚拟机都需要的根元素,它有两个属性, //type定义使用哪个虚拟机管理程序,值可以是:xen.kvm. ...

  8. Nginx代理MysqlCluster集群(二)

    Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...

  9. luogu3759 不勤劳的图书管理员 (树状数组套线段树)

    交换的话,只有它们中间的书会对答案产生影响 树状数组记位置,套线段树记书的编号 它对应的页数和书的个数 然后就是减掉中间那些原来是逆序对的,再把交换以后是逆序对的加上 别忘了考虑这两个自己交换以后是不 ...

  10. CANOE入门(一)

    CANoe是Vector公司的针对汽车电子行业的总线分析工具,现在我用CANoe7.6版本进行介绍,其他版本功能基本差不多. 硬件我使用的是CAN case XL. 1,CANoe软件的安装很简单,先 ...