新增最少的字元讓字串變為回文字串(1)
給定乙個字串str,如果可以在str的任意位置新增字元,請返回在新增字元最少的情況下,讓str整體都是回文字串的一種結果。
輸入描述:
輸入包含一行字串,代表str
(1≤l
engt
hstr
≤5000
)str(1 \leq length_ \leq 5000)
str(1≤
leng
thst
r≤5
000)
。輸出描述:
輸出一行,代表返回的字串。
示例1輸入
aba
輸出aba
示例2
輸入
ab
輸出aba
備註:
時間複雜度o(n
2)
o(n^2)
o(n2
),空間複雜度o(n
2)
o(n^2)
o(n2)。
題解:動態規劃,設 f[i, j] 表示子串 s[i…j] 最少新增幾個字元可以使得 s[i…j] 整體是回文串,f[i, j] 有下面三種情況:
在輸出時,只需要根據動態規劃表還原即可。
**:
#include
#include
#include
using
namespace std;
const
int n =
5001
;char s[n]
;int f[n]
[n];
char ret[n <<1]
;int
main
(void)}
int i =
0, j = len -1;
int tot_len = len + f[0]
[len -1]
;int l =
0, r = tot_len -1;
while
(i <= j)
else
if(f[i +1]
[j]< f[i]
[j -1]
)else
}puts
(ret)
;return0;
}
新增最少的字元讓字串變成回文串(2)
新增最少的字元讓字串變成回文串 2 給定乙個字串str,再給定str的最長回文子串行字串strlps,請返回在新增字元最少的情況下,讓str整體都是回文字串的一種結果。高階問題比原問題多了乙個引數,請做到時間複雜度比原問題的實現低。輸入描述 輸出包含兩行,第一行包含乙個字串代表str 1 l eng...
2 3 字串 新增最少字元使字串都是回文字串
給定乙個字串str,可以在str的任意地方新增字元,請返回在新增字元最少的情況下,讓str整體都是回文字串的結果 分析 1 問題關鍵 如何以個例推整體,再由整體推回個例?回文字串問題 顯然,當任意 i j 字串為回文字串時,其中的任意k使得 i k j k 同樣也是回文字串,這樣可以推出結論 先假設...
插入最少的字元使字串成為回文串
求出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...