正确代码:
#include <cstdio>
#include <cstring>
const int maxl = 1001;
int main(){
char s[maxl];
fgets(s, maxl, stdin);
int n;
for(n=0; n<maxl; n++){
if(s[n]=='\n'){
s[n] = '\0';
break;
}
}
bool judge[n][n]={
};
int ans = 1;
//边界
for(int i=0; i<n; i++){
judge[i][i] = 1;
if(i<n-1 && s[i]==s[i+1]){
judge[i][i+1] = 1;
ans = 2;
}
}
//处理顺序
for(int L=3; L<=n; L++){
for(int i=0; i+L-1<n; i++){
int j = i + L - 1;
//状态转移方程
if(s[i]==s[j] && judge[i+1][j-1]==1){
judge[i][j] = 1;
ans = L;
}
}
}
printf("%d", ans);
return 0;
}
中间犯了一个错误,如下:
for(int L=3; L<=n; L++){
for(int i=0; i+L-1<n; i++){
int j = i + L - 1;
//状态转移方程
if(s[i]==s[j]){
judge[i][j] = judge[i+1][j-1];
ans = L; //错误点:只要s[i]==s[j]都能进来修改ans
}
}
}