很明显 将串反转与原串求LCS 然后用总长减即可。
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int max(int a,int b) { return a>b?a:b; } int main() { int len,i,j; char str[5010],str1[5010]; int dp[3][5010]; while(~scanf("%d",&len)) { scanf("%s",str1); for(i=0;i<len;i++) str[i]=str1[len-i-1]; str[len]=‘\0‘; //printf("%s %s\n",str1,str); memset(dp,0,sizeof(dp)); int Max=0; for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(str1[i-1]==str[j-1]) { dp[1][j]=dp[0][j-1]+1; } else { dp[1][j]=max(dp[0][j],dp[1][j-1]); } if(dp[1][j]>Max) Max=dp[1][j]; } for(j=1;j<=len;j++) dp[0][j]=dp[1][j]; } printf("%d\n",len-Max); } return 0; }
时间: 2024-11-08 17:07:37