分析
代码
#include <cstdio>
#include <string.h>
const int N = 1010;
char s[N];
int f[N][N];
int main()
{
scanf("%s", s);
int n = strlen(s);
for (int len = 1; len <= n; len ++ )//枚举长度
for (int l = 0; l + len - 1 < n; l ++ )//枚举左端点
{
int r = l + len - 1;
if (len == 1) f[l][r] = 1;//如果只有一个元素,解就是1
else
{
if (s[l] == s[r]) f[l][r] = f[l + 1][r - 1] + 2;//只有左右端点相等的时候才能有的情况
if (f[l][r - 1] > f[l][r]) f[l][r] = f[l][r - 1];
if (f[l + 1][r] > f[l][r]) f[l][r] = f[l + 1][r];
}
}
printf("%d\n", n - f[0][n - 1]);
return 0;
}