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

2021-10-09 22:07:06 字數 1218 閱讀 4380

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