输入一个字符串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. Javascript 实现复制(Copy)动作方法大全

    一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function copyUrl2() { var Url2=d ...

  2. JQuery operate xml

    msg is <?xml ?> <Parameters> <WorkflowName>...</WorkflowName> </Parameter ...

  3. hdu-1238(kmp+枚举)

    题意:给你n个字符串,问你这里面最长的公共子串的长度是多少,一个公共子串的反串也算,比如样例二: 解题思路:随便找一个字符,枚举它的子串然后跑kmp就行了,很多人的博客都是用string类里面的函数来 ...

  4. python第三方库的四种安装方法

    1,直接pip install安装 2,在python-->default setting-->project interprer-->add 3,在这个链接里找到需要的包,下载 h ...

  5. windows新增/修改/删除系统环境变量bat示例,一键配置JAVA_HOME

    setx JAVA_HOME "C:\Program Files\java\jdk1.6.0_27" /m setx classpath = ".;%JAVA_HOME% ...

  6. python模块psutil的使用

    介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统 ...

  7. BZOJ3812 主旋律(状压dp+容斥原理)

    设f[S]为S点集是SCC的方案数.考虑通过去掉不合法方案转移.可以枚举入度为0的SCC所含点集S',这样显然S^S'内部的边和由S'连向S^S'的边删还是不删任选.但是这样无法保证S'包含所有入度为 ...

  8. Codeforces Round #518 (Div. 2) B. LCM gcd+唯一分解定律

    题意:给出b 求lcm(a,b)/a 在b从1-1e18有多少个不同得结果 思路lcm*gcd=a*b  转换成    b/gcd(a,b) 也就是看gcd(a,b)有多少个值  可以把b 由唯一分解 ...

  9. [NOIp2016] 蚯蚓

    类型:单调队列 传送门:>Here< 题意:有$N$只蚯蚓,每秒都会伸长$q$.每一次都会有人选出最长的一条切成两半,长度分别是$\left \lfloor px \right \rflo ...

  10. [APIO 2009] Atm

    传送门:>Here< 题意:给出一个有向图(有环),每个点有点权.从点S出发,经过每个点Tot可以加上点权,点可以经过多次,然而点权不能重复加多次.先要求走到某个终点E时点权最大.先要求在 ...