題目:請從乙個已知的字串中尋找最長回文字串
解法1:動態規劃
回文字串的子串也是回文,比如p[i,j](表示以i開始以j結束的子串)是回文字串,那麼p[i+1,j-1]也是回文字串。這樣最長回文子串就能分解成一系列子問題了。這樣需要額外的空間o(n^2),演算法複雜度也是o(n^2)。
狀態方程和轉移方程:
p[i, j] = p[i+1, j-1], if ( s[i]==s[j] )
p[i, j] = 0,if ( s[i] != s[j] )
其中p[i,j]=0表示子串[i,j]不是回文串;p[i,j]=1表示子串[i,j]是回文串。該狀態轉移方程很特別,是乙個條件不等式,這也是動態規則非常典型的一種狀態轉移方程。
string findlongestpalindrome(string &s)
; for(int i=0;i=2)
return s.substr(start,maxlength);
return null;
}
解法二:中心擴充套件法
中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。演算法複雜度為o(n^2)。
但是要考慮兩種情況:
1、像aba,這樣長度為奇數。
2、想abba,這樣長度為偶數。
string findlongestpalindrome(string &s)
j--;
k++;
} }for(int i=0;i=0&&kmaxlength)
j--;
k++;
} }if(maxlength>0)
return s.substr(start,maxlength);
return null;
}
動態規劃(5) 最長回文字串
給出乙個字串s,求s 的最長回文子串 連續 的長度。輸入 patzjujztaccbcc 輸出 9 最優子結構 如atzjujzta是回文子串,那麼它字串tzjujzt一定是回文子串,且長度等於tzjujzt的長度 2 重複子問題 如求atzjujzta和tzjujzt的長度,都會用到juj的長度 ...
回文字串判斷c語言 動態規劃 最長回文字串
給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例1 輸入 babad 輸出 bab 注意 aba 也是一 個有效答案。示例2 輸入 cbbd 輸出 bb 這是一道非常經典的動態規劃的題目,我是在回顧演算法題的時候看到這一題,我記得我以前做過,但是理解不深,所以當時我怎麼...
最長回文串 動態規劃)
半對 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路一 翻轉字串法。1.將整個字串反轉,然後判斷原始的字串是否在反轉的字串 現。2.只是出現還不...