1159 Palindrome 最少插入回文串

2021-06-26 01:41:01 字數 900 閱讀 7156

題目大意

給出乙個串的長度及該串內容,可以在任意位置插入乙個字元,求最少的插入數字,使得串程式設計回文串.

回文串及從左向右和從右向左讀相同.

例如.aaaacbbbb是回文串

aaab不是回文串我們可以給最前面插入b使得原串變為baaab這個回文串

我的思路.

1.如果該串為空串,或者長度為一,該串是回文串.

2.如果有字串,a[o...n-1],(0<=l,r1可能是l-r對稱回文(如果a[l]==a[r]),在匹配[l+1,r-1]這個串

2.l,給r處新增字a[l]和l位置匹配,在匹配[l,r-1]這個串

3l處新增字元a[r],和r位置匹配,在匹配[l+1,r]這個串

3.用以上方法加上備忘錄d[l][r]來記錄算過的串的最少插入數目

d[l][r]記錄從l...r匹配插入的最少字元,問題d[0][n-1]

if(a[l]==a[r]) dd[l][r]=d[l+1][r+1];

else dd[l][r]=max(dd[l+1][r],dd[l][r-1])+1;

備忘錄開成short,否則記憶體超,

險過得的**.

/*source code

problem: 1159 user:

memory: 49652k time: 1782ms

language: gcc result: accepted

source code*/

/*插入最少的數字是原來數組成回文串*/

#include #include short dd[5001][5001];

char str[5002]="";

int min(int a,int b)

}int main()

最少插入字元分析

題目 原題給定字串,可以通過插入字元,使其變為回文。求最少插入字元的數量。例如 1.ab最少插入 1個字元,變為 b ab2.aa最少插入 0個字元 3.abcd 最少插入 3個字元,dcb abcd分析 根據回文串的定義,很容易獲得遞迴思路,首先比較第乙個和最後乙個字元,相等則插入個數等於中間的插...

插入最少字元使原串變成回文串

51nod1092 回文字串 解法一 這裡插入字元和刪除對應字元是乙個道理,所以將原串逆序之後求一遍lcs即可 include using namespace std const int maxn 1000 char a maxn 10 char b maxn 10 int sum maxn 10 ...

插入最少的字元使字串成為回文

今天和舍友聊到演算法題,他問了這道題,覺得挺有意思,故寫下解題思路。老久沒做演算法題了,偶爾搞搞還是挺有意思。給定乙個字串s,可以通過在字串的任意位置插入字元,使其變為回文串。求最少插入字元的數量。例如 ab bab 1 aa aa 0 abca acbca 1 如果能在原串s中找到最長的子串行l,...