天天看點

leetcode之回文系列

1 回文識别基礎

回文通俗地将就是把一個句子或者字元串正過來反過來讀都是一樣的.

比如123321就是一個回文.

識别一個回文字元串思路也很簡單:定義兩個指針分别指向字元串的頭尾,若果兩個指針指向的字元相等,那麼繼續逐漸向中間收縮,否則退出循環.

知道指針相遇.如果指針相遇之前就已經停止那麼就不是回文

leetcode之回文系列

2 回文串的加強版

leetcode之回文系列

原題

leetcode之回文系列
leetcode之回文系列
leetcode之回文系列

3 回文數字

leetcode之回文系列

原題

leetcode之回文系列

解:

時間O(n)空間O(1)其中x/t%10表示每次循環數字的首位,比如1234的首位計算為:1234除以1000等等于1,在對10 取餘,結果為1。下一次循環首位為1234/100%10結果為2,一次類推,而最末尾則為直接對10 取餘,末尾向左以為則為1234/10再對10 取餘,基本原理是這樣。
leetcode之回文系列
leetcode之回文系列

4 最長回文字串

leetcode之回文系列
  • 暴力求解法

窮舉思路:取出所有的子串,判斷它是否回文,并傳回最長的子串

leetcode之回文系列
leetcode之回文系列
leetcode之回文系列
  • 中心擴充法
    思路從字元串中的某個元素開始(逐個判斷),向兩邊擴充,判斷是否回文并記錄,将取得最長子回文傳回即可。
leetcode之回文系列

![](http://upload-images.jianshu.io/upload_images/2916604-f2c8388c25755161.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  • 動态規劃法簡介
leetcode之回文系列
  • Manacher算法簡介
leetcode之回文系列
leetcode之回文系列
leetcode之回文系列

5. leetCode 234:Palindrome Linked List(回文連結清單)

leetcode之回文系列
leetcode之回文系列

按照以往的經驗,關于回文問題不外乎兩種:中心擴充法,兩端收縮法

然而單連結清單無法倒序周遊,兩種方法都沒有什麼卵用。

leetcode之回文系列
仔細觀察一個回文比如:1 2 3 4 5 5 4 3 2 1發現有什麼規律?假象把這個連結清單對折,那麼相應的每個對稱的數字都對的上(這不廢話~),其實這個對折過程就是先把連結清單的一半(前一半後一半都行)反轉然後在比對的過程,如果是回文當然能一一對應上啦
leetcode之回文系列
leetcode之回文系列

實作代碼:

leetcode之回文系列
leetcode之回文系列

**有時候面試官會要求不要破壞連結清單結構

那麼可以把連結清單的一半用棧儲存起來,然後再比較。

或者還是用之前的方法,翻轉之後再給翻轉回去~~**

leetcode之回文系列