一種是暴力檢索
另外一種則是中心擴散法
暴力搜尋法:
從字串的開始和末尾處標定乙個點後,依次向後向前檢索,並判斷前後檢索的字串是否相同
bool ispalindrome
(string s)
return
true
;}
中心擴散法:
利用雙指標去線性掃瞄一遍 [i, j] 判斷是否回文。我們先預處理除所有的 rec[i][j],rec[i][j] 代表 字串s的[i, j] 這一段是否為回文串。是則為true,不是則為false,
注意:一開始我們初始化rec需要全部設定為false。
思路:以下圖為例,
1.單個字串一定是回文串,那麼接著判斷相鄰的兩個字串,很簡單只要相鄰兩個字元相同,
則一定是回文串。
2.接著判斷三個即三個以上的字串,以cbc為例,兩個c指標分別為i,j,
此時需要有前提就是這兩個位置的字元首先得相同即s[i] == s[j],
其次判斷rec[i][j]是不是回文串只需要看[i + 1][j - 1]之間的字串,即指標分別往中間移一位,此時若[i+1][j-1]之間是回文串,
則[i][j] 之間就一定是回文串,cbc,c==c,若兩個c之間是回文串,則cbc是回文串
同樣道理字串cccc,c=s[i] == s[j]=c,指標往中間移[i + 1][j - 1]之間的cc是回文串,所以[i]和[j]之間的cccc是回文串
}}
注:若被判斷的數x為整型資料,那麼還有一種更簡單的方法判斷,只需要讓x與他的反數reversed(x)相等即可
**如下:
classaif
(reversed >=
int_max
|| reversed <=
int_min)if
(reversed==x)
else
};
回文字串 回文子串 中心擴散法
解答參考 動態規劃 中心擴散 manacher 演算法 問題描述 給你乙個字串s,找到s中最長的回文子串。比如給定字串s babad 找出最長的回文子串為 bab 演算法思路 本題可以採用暴力破解法 中心擴散法 manacher演算法3種方法,本篇文章講解暴力破解法。暴力法採用雙指標兩邊夾,驗證是否...
中心擴散演算法 最長回文子串
這篇看一下中心擴散演算法。輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb include include include include includeusing namespace std 最長回文子串 中心擴散演算法 class soluti...
Day3 回文串中心擴散
class solution int size s.length int start 0 int end 0 for int i 0 i size i return s.substring start,end 1 public int check string s,int begin,int end...