这题转化为求最长公共子序列。不详细说了
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>
#include <algorithm>
#include <cmath>
#define PI 3.1415926
#define E 2.718281828459
#define MAXN 1005
using namespace std;
typedef long long LL;
string ss,tt;
int dp[MAXN][MAXN];
int main()
{
// freopen("in.txt","r",stdin);
while(cin>>ss)
{
tt = ss;
int n = ss.size();
memset(dp,0,sizeof(dp));
reverse(tt.begin(),tt.end());
for(int i = 0; i < ss.size(); i++)
{
for(int j = 0; j < tt.size(); j++)
{
if(ss[i] == tt[j])dp[i+1][j + 1] = dp[i][j] + 1;
else dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);
}
}
printf("%d\n",n - dp[n][n]);
}
return 0;
}