题目链接
思路
上一篇
判断完这些问题
需要确定从哪里开始写状态方程
可以确保无后效性
拍脑门一想
除了长度为2,长度为1的子串没法通过状态方程推出
3及3以上的都可以
满足
代码中
dp[i][j]表示下标为i到j的字符串是否回文
则在子串长度≥3时
可以通过dp[i+1][j-1]对dp[i][j]进行推导
代码
using namespace std;
#include <iostream>
#include<string>
int dp[1010][1010], ans = 1;
int main() {
string s;
getline(cin, s);
for (int i = 0; i < s.size(); i++) {
dp[i][i] = 1;
if (i + 1 <= s.size() - 1&&s[i]==s[i+1]) {
ans = 2;
dp[i][i + 1] = 1;
}
}
for (int l = 3; l <= s.size(); l++) {
for (int i = 0; i <= s.size() - l; i++) {
int j = i + l - 1;
if (s[i] == s[j] && dp[i + 1][j - 1] == 1) {
dp[i][j] = 1;
ans = l;
}
}
}
cout << ans;
return 0;
}