最少新增幾個成為迴文字串--nyoj36
阿新 • • 發佈:2019-01-08
描述
所謂迴文字串,就是一個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷一個字串是不是迴文字串。現在要求你,給你一個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為迴文字串。
輸入
第一行給出整數N(0<N<100)
接下來的N行,每行一個字串,每個字串長度不超過1000.
輸出
每行輸出所需新增的最少字元數
樣例輸入
1 Ab3bd
樣例輸出
2
分析:求出原字串和倒置字串的最長公共序列,然後用字串長度減去這個公共長度即可,而公共序列的求解套用dp模板即可
#include <iostream> #include<string> #include<string.h> #include<algorithm> using namespace std; const int maxn = 1000+5; int ma[maxn],dp[maxn][maxn],n,k; int main() { string s1,s2; cin>>k; while(k-->0){ memset(dp,0,sizeof(dp)); cin>>s1; s2 = s1; n = s1.length(); reverse(s2.begin(),s2.end()); for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(s1[i] == s2[j]) dp[i+1][j+1] = dp[i][j]+1; else dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1]); } } cout<<n-dp[n][n]<<endl; } return 0; }