一个注意点,本题的动态规划内容是在长度大于等于3的时候展开的,那么在此之前处理1,2
长度的时候,记得不要忘记ans的值的变化
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
const int maxn=1010;
int d[maxn][maxn]={0};
int main()
{
string str;
getline(cin,str);
int len=str.size(),ans=1;
for(int i=0;i<len;i++)
{
d[i][i]=1;
if(i+1!=len)
{
if(str[i]==str[i+1])
{
d[i][i+1]=1;
ans=2;
}
}
}
for(int L=3;L<=len;L++)
{
for(int i=0;i+L-1<len;i++)
{
if(str[i]==str[i+L-1]&&d[i+1][i+L-2]==1)
{
d[i][i+L-1]=1;
ans=L;
}
}
}
printf("%d",ans);
}
本文介绍了一种使用动态规划算法寻找字符串中最长回文子串的方法。通过初始化状态转移方程,该算法能有效处理长度大于等于3的情况,同时确保不忽略短于3的回文子串。在遍历过程中,算法动态更新最大回文子串的长度,最终输出最长回文子串的长度。
2501

被折叠的 条评论
为什么被折叠?



