回文串問題

2022-08-24 23:09:10 字數 1013 閱讀 2648

1.回文串的判斷

#include #include 

using

namespace

std;

//回文串的判斷

bool ispalindrome(const

char*src)

return

true;}

intmain()

2.最長回文子串

中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。演算法複雜度為o(n^2)。

但是要考慮兩種情況:

1、像aba,這樣長度為奇數。

2、像abba,這樣長度為偶數。

int expandaroundcenter(const

char* src,int left,int right)//

從中間往兩頭判斷最長回文串

return right - left - 1;}

void longestpalindromecenter(const

char*src)

len = expandaroundcenter(src,i,i+1);//

針對偶數

if(len >maxlen)

}for(i = begin;i <= end;i++)

cout

<}int

main()

動態規劃法:

回文字串的子串也是回文,比如p[i,j](表示以i開始以j結束的子串)是回文字串,那麼p[i+1,j-1]也是回文字串。這樣最長回文子串就能分解成一系列子問題了。這樣需要額外的空間o(n^2),演算法複雜度也是o(n^2)。

首先定義狀態方程和轉移方程:

p[i,j]=0表示子串[i,j]不是回文串。p[i,j]=1表示子串[i,j]是回文串。

p[i,j]{=p[i+1,j-1] , if(s[i]==s[j])

=0 , if(s[i]!=s[j])

回文串問題

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

回文字串問題

a 回文串問題 time limit 1000ms memory limit 131072kb 64bit io format lld llu submit status practice csu 1260 description 回文串 是乙個正讀和反讀都一樣的字串,字串由數字和小寫字母組成,比如...

演算法 回文串問題

問題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,則在新增...