leetcode之回文系列

1 回文識別基礎

回文通俗地將就是把一個句子或者字符串正過來反過來讀都是一樣的.
比如123321就是一個回文.

識別一個回文字符串思路也很簡單:定義兩個指針分別指向字符串的頭尾,若果兩個指針指向的字符相等,那么繼續逐漸向中間收縮,否則退出循環.
知道指針相遇.如果指針相遇之前就已經停止那么就不是回文



2 回文串的加強版

原題

3 回文數字

原題


解:

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

4 最長回文字串

  • 暴力求解法

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

  • 中心擴展法

思路從字符串中的某個元素開始(逐個判斷),向兩邊擴展,判斷是否回文并記錄,將取得最長子回文返回即可。

  • 動態規劃法簡介
  • Manacher算法簡介

5. leetCode 234:Palindrome Linked List(回文鏈表)

按照以往的經驗,關于回文問題不外乎兩種:中心擴展法,兩端收縮法
然而單鏈表無法倒序遍歷,兩種方法都沒有什么卵用。



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


實現代碼:

有時候面試官會要求不要破壞鏈表結構
那么可以把鏈表的一半用棧保存起來,然后再比較。
或者還是用之前的方法,翻轉之后再給翻轉回去~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.把二元查找樹轉變成排序的雙向鏈表 題目: 輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。 要求不...
    曲終人散Li閱讀 3,357評論 0 19
  • 上一篇KMP算法之后好幾天都沒有更新,今天介紹最長回文子串。 首先介紹一下什么叫回文串,就是正著讀和倒著讀的字符順...
    zero_sr閱讀 2,342評論 2 8
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,394評論 0 3
  • 目錄 1. 棧和隊列1.用兩個隊列實現棧2.用兩個棧實現隊列3.實現一個棧,可以用常數級時間找出棧中的最小值4.判...
    MigrationUK閱讀 3,057評論 4 20
  • 于顧一宸 顧一宸的寫作歷程 6月10號的時候,我去上海簽售。 在上海言幾又書城長泰店,我和來到現場的眾多讀者分享了...
    ouxyea閱讀 185評論 0 0