新增最少的字元讓字串變成回文串(2)

2021-10-09 22:34:38 字數 1202 閱讀 6209

新增最少的字元讓字串變成回文串(2)

給定乙個字串str,再給定str的最長回文子串行字串strlps, 請返回在新增字元最少的情況下,讓str整體都是回文字串的一種結果。高階問題比原問題多了乙個引數,請做到時間複雜度比原問題的實現低。

輸入描述:

輸出包含兩行,第一行包含乙個字串代表str

(1≤l

engt

hstr

≤5000

)str(1 \leq length_ \leq 5000)

str(1≤

leng

thst

r​≤5

000)

,第二行包含乙個字串,代表strips。

輸出描述:

輸出一行,代表返回的值。

示例1輸入

a1b21c

121

輸出
ac1b2b1ca
說明
str=「a1b21c",strlps="121",返回「ac1b2b1ca」或者「ca1b2b1ac」,總之,只要是新增的字元數最少,只返回其中一種結果即可。
題解:

既然此題給了最長回文子串行,那麼我們就要考慮用此子串行搞事情。最長回文子串行肯定出現在最終的回文串中,並且子串行左右部分沒有相等的字元(不然會構成更長的回文子串行),並且最終的回文子串長度為:2*len(str)-len(strlps)。我們可以採用「剝洋蔥」的方式去構造回文串:

**:

#include

#include

using

namespace std;

const

int n =

5001

;char s[n]

;char t[n]

;char ret[n <<1]

;int

main

(void

)while

(s[se]

!= t[ts]

) ret[rs++

]= s[ss++];

ret[re--

]= s[se--];

++ts,

--te;

}puts

(ret)

;return0;

}

新增最少的字元讓字串變為回文字串(1)

新增最少的字元讓字串變為回文字串 1 給定乙個字串str,如果可以在str的任意位置新增字元,請返回在新增字元最少的情況下,讓str整體都是回文字串的一種結果。輸入描述 輸入包含一行字串,代表str 1 l engt hstr 5000 str 1 leq length leq 5000 str 1...

php移除最少字元變成回文串

s for i 0 i 15 i s string strtoupper s echo string 這是隨機生成乙個字串 一段字串 移除最少的字元 使之成為乙個回文串 比如 abba ababa a 都是回文串 absdfda 移除最少字元後形成回文 變成 adfda 重點講解下 回串文的 第乙個...

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

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