- 把原来的序列倒过来。计算最长公共子序列。
- 然后该字符串得长度减去最长公共子序列的长度即可。
#include<bits/stdc++.h> using namespace std; char a[1001], b[1001]; int dp[1001][1001];//公共最长子序列 int main(){ string s; while(cin>>s){ if(s.size()==1){ cout<<0<<endl; continue; } for(int i = 0; i< s.size();i++){ b[i] = s[s.size()-1-i]; } memset(dp,0,sizeof(dp));////清空数组 for(int i = 1; i<=s.size();i++ ){ for(int j = 1; j<= s.size();j++){ if(s[i-1] == b[j-1]){ dp[i][j] = dp[i-1][j-1]+1; }else{ dp[i][j] = max(dp[i][j-1],dp[i-1][j]); } } } cout<<s.size()-dp[s.size()][s.size()]<<endl; } return 0; }