1.回文串的判斷
#include #includeusing
namespace
std;
//回文串的判斷
bool ispalindrome(const
char*src)
return
true;}
intmain()
2.最長回文子串
中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。演算法複雜度為o(n^2)。
但是要考慮兩種情況:
1、像aba,這樣長度為奇數。
2、像abba,這樣長度為偶數。
int expandaroundcenter(constchar* 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,則在新增...