最长回文子串
程序员文章站
2024-02-27 15:03:21
...
实现代码:
#include<cstdio>
#include<cstring>
const int maxn = 1010;
char S[maxn];
int dp[maxn][maxn];
int main(){
gets(S);
int len = strlen(S),ans = 1;
memset(dp,0,sizeof(dp));//dp数组初始化
for(int i = 0;i < len ;i++){
dp[i][i] = 1;
if(i < len -1){
if(S[i] == S[i + 1]){
dp[i][i+1] = 1;
ans = 2;//初始化时注意当前最长回文子串长度
}
}
}
for(int L = 3; L <= len;L++){ //枚举子串的长度
for(int i =0 ;i + L -1 < len;i++){ //枚举子串的起始端点
int j = i + L -1;
if(S[i] == S[j]&&dp[i + 1][j -1] == 1){
dp[i][j] = 1;
ans = L;//更新最长回文子串长度
}
}
}
printf("%d\n",ans);
return 0;
}
下一篇: 详解Android 手机卫士设置向导页面