将字符串逆置,求两个字符串的最大公共子序列,然后用字符串的长度减去子序列的长度就是结果!
#include <iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
char m1[1000],m2[1000];
int dp[1000][1000];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(dp,0,sizeof(dp));
cin>>m1;
int len=strlen(m1);
for(int i=len-1;i>=0;i--)//逆置字符串数组
m2[len-1-i]=m1[i];
for(int i=1;i<=len;i++)
for(int j=1;j<=len;j++)
{
if(m1[i-1]==m2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
cout<<len-dp[len][len]<<endl;
}
}