原串长度减去 原串和逆串的最长公共子序列的长度
#include<stdio.h> #include<algorithm> using namespace std; #define N 5005 char a[N]; char b[N]; short int dp[N][N]; int main() { int n; scanf("%d",&n); scanf("%s",a); int i,j; for(i=0,j=n-1;i<n;j--,i++) { b[i]=a[j]; } for(i=0;i<n;i++) { dp[n][i]=0; dp[i][n]=0; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i-1]==b[j-1]) { dp[i][j]=dp[i-1][j-1]+1; } else { dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } printf("%d ",n-dp[n][n]); return 0; }