時間限制:3000 ms | 記憶體限制:65535 kb
難度:4
描述所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。
輸入第一行給出整數n(0輸出
每行輸出所需新增的最少字元數
樣例輸入
1
ab3bd
樣例輸出
2
abd3dba
分析:d[i][j]表示從第 i 到第 j 的最優解;
if(a[i]==a[j]) d[i][j]=d[i+1][j-1];
d[i][j]=min;
從串的兩邊考慮,設d(i,j)表示在串s(i,j)中最少插入字元個數
這裡有大量重複子問題,所以要用記憶化搜尋
#includeusing namespace std;
const int maxn=1000;
char s[maxn+10];
int d[maxn+10][maxn+10];
int dp(int i,int j)
int main()
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
}cout例如: s = abca 那麼 s' = acba ,那麼l = aba 那麼答案就是1.即 a c『 b c a。其中'c'為插入的字元。
該演算法的核心是求最長公共子串行,最長公共子串行有dp的求法,演算法的複雜度是 時間和空間都是 o(n^2)
插入最少的字元使字串成為回文串
求出s中,是回文的最長子序列l,那麼結果ans length s length l 解法如下 1.求出s的逆序串s 2.求出s和s 的最長公共子串行l 3.ans length s length l 如下 include include include using namespace std con...
字串插入
coursera上北大 計算概論a 期中試題 描述 有兩個字串 str和 substr str 的字元個數不超過10,substr 的字元個數為3。將 substr插入到 str中 a scii 碼最大的那個字元後面,若有多個最大則只考慮第乙個。輸入 輸入包括若干行,每一行為一組測試資料,格式為 s...
字串演算法題總結
字串題做了將近乙個月,部落格上整理的20道和筆記中整理的十幾道,接近40道了,不總結一下整體的思路,大腦是一片混亂的。基礎題 考查對字串類相關的操作,其中重點掌握切片 連線和內建方法。子串題 子串題盡是困難題,但是同時也是非常經典的一類題目,需要好好掌握。常用的方法和技巧有滑動視窗 python c...