演算法 回文串問題

2021-09-23 11:16:41 字數 521 閱讀 1428

問題a:

給定乙個字串,任意位置可以新增新字元,則最少新增幾個變為回文串:

dp,時間o(n*n)

維護二維表,dp[i][j] 表示 區間[i…j]所需最少字元。

轉移方程:dp[i][j] = dp[i+1][j-1] or dp[i][j] = min + 1

問題b:

給定乙個字串str,再給定乙個回文子串strpls,則在新增元素最少時,給出str的回文串。

剝洋蔥,時間o(n)

l,r從str外層找strpls最外的元素,然後處理l,r之外元素,然後依次往內層遞迴。

問題c:

給定一串括號,給出最長合法子串。

例如,「()(()()(」,返回4

dp,時間o(n)

dp[i]表示必須以 i 結尾的最長合法串長度。

所以迴圈時考慮,i - dp[i] - 1位置和i-1位置即可。

有種特殊情況,需要處理,

即"()(())"的情況,當找到「(())」後,需要把之前的「()」合併。

回文串問題

乙個字串,如果從左到右讀和從右到左讀是完全一樣的,比如 aba 我們稱其為回文串。現在給你乙個字串,可在任意位置新增字元,求最少新增幾個字元,才能使其變成乙個回文串。輸入格式 任意給定的乙個字串,其長度不超過1000.輸出格式 能變成回文串所需新增的最少字元數。輸入樣例 在這裡給出一組輸入。例如 a...

回文串問題

1.回文串的判斷 include include using namespace std 回文串的判斷 bool ispalindrome const char src return true intmain 2.最長回文子串 中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來...

最長回文串演算法

總的來說,最長回文串演算法分為以下幾種。通過遍歷整個字串來說實現對最長回文串的查詢 首先乙個字串所有子串,個數為n2個,然後逐個判斷遍歷即可,演算法複雜度o n3 如下 def is palindrome s str length len s for i in range str length 2 ...