題目大意
給出乙個串的長度及該串內容,可以在任意位置插入乙個字元,求最少的插入數字,使得串程式設計回文串.
回文串及從左向右和從右向左讀相同.
例如.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,...