新增最少的字元讓字串變成回文串(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 ...