C 判斷回文串 中心擴散法

2021-10-21 15:24:44 字數 1212 閱讀 1579

一種是暴力檢索

另外一種則是中心擴散法

暴力搜尋法:

從字串的開始和末尾處標定乙個點後,依次向後向前檢索,並判斷前後檢索的字串是否相同

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...