演算法題 源字串插入最少字元生成回文串

2021-07-14 13:03:51 字數 987 閱讀 7694

時間限制: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...