經典字串題 最長回文子字串 Leetcode #5 Longest Palindromic Substring

更新於 2024/09/22閱讀時間約 4 分鐘
raw-image

這題的題目在這裡

題目會給定一個字串,問我們裡面最大的回文子字串內容為何?


測試範例:

Example 1:

Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.

Example 2:

Input: s = "cbbd"
Output: "bb"

約束條件:

Constraints:

  • 1 <= s.length <= 1000
  • s consist of only digits and English letters.

演算法:

逐一從左到右,掃描每個字元。

以每個字元當作中心,向兩側擴展,擴展的同時,檢查是否滿足回文字串的特性,頭尾相等。

每一輪擴展完,更新並且記錄,最長的回文子字串。


程式碼:

class Solution:
 def longestPalindrome(self, s):


  # get the longest palindrome, from left to right inclusively
  # index grows from center to outer
  def central_expansion_from(self, left, right):
   
   while left >= 0 and right < len(s) and s[left] == s[right]:
    left, right = left-1, right+1
    
   return s[left+1:right] 

  
  longest_palindrome = ""
  
  #scan each possible i as center index
  for i in range(len(s)):
   
   # Odd length, central expansion pattern: "s" -> "asa"
   odd_len_palindrome = central_expansion_from(s, i, i)

   if len(odd_len_palindrome) > len(longest_palindrome):
    longest_palindrome = odd_len_palindrome
    
 
   # Even length, central expansion pattern: "s" -> "assa"
   even_len_palindrome = central_expansion_from(s, i, i+1)
   
if len(even_len_palindrome) > len(longest_palindrome):
    longest_palindrome = even_len_palindrome
    
  return longest_palindrome

要注意的部分就是,下標的部分要處理好,最後在central_expansion_from

function裡面,合法的回文子字串是s[left+1:right]


時間複雜度: O( n² )

外層for loop 掃描花費O(n), 內層回文字串比較while loop再花費O( n )

空間複雜度: O( n )

紀錄回文子字串,最長可能長度為O( n )


Reference:

[1] Python O(n²) by center expansion [w/ Comment] — Longest Palindromic Substring — LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
題目會給我們一個排序好的矩陣matrix ,和一個目標值 target 要求我們在矩陣中尋找target,如果存在,返回True。 如果target 不存在,返回False 題目要求必須在O( log (m*n) )對數時間內完成 。
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
題目會給我們一個輸入陣列candidates,和一個目標值 target 問我們,從canditdates裡面重複挑選,可以湊出總和為target目標值的組合數有幾種? 在此,我們將使用找零錢II的DP模型和化簡的技巧來解題。
在經過比較簡單的入門題(Coin Change)之後, 來看進階一點的DP題目Coin Change II 整零錢的全部方法數。 不免俗,再次強調DP的解題框架,鞏固知識點。
深入淺出,從最基本的 費式數列, 一探動態規劃的奧秘與精隨。
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
題目會給我們一個排序好的矩陣matrix ,和一個目標值 target 要求我們在矩陣中尋找target,如果存在,返回True。 如果target 不存在,返回False 題目要求必須在O( log (m*n) )對數時間內完成 。
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
題目會給我們一個輸入陣列candidates,和一個目標值 target 問我們,從canditdates裡面重複挑選,可以湊出總和為target目標值的組合數有幾種? 在此,我們將使用找零錢II的DP模型和化簡的技巧來解題。
在經過比較簡單的入門題(Coin Change)之後, 來看進階一點的DP題目Coin Change II 整零錢的全部方法數。 不免俗,再次強調DP的解題框架,鞏固知識點。
深入淺出,從最基本的 費式數列, 一探動態規劃的奧秘與精隨。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
淡蘭古道一條清朝時候興建穿越宜蘭縣到台北市的古道。時至西元二零一八年梳理為「北路」、「中路」、「南路」三大路網。淡蘭古道中路被稱為民道。行經新北市平溪區十分地區至新北市雙溪區柑腳地區、泰平地區到宜蘭市外澳地區。古代人行經此路吃的、在注腳雙溪工作室重現經典淡蘭飯包,成為懷古的一種餐盒。 淡蘭飯包
Thumbnail
臺中音樂鈴博物館非常適閤家族旅遊,遊客可以參加DIY體驗、觀賞音樂盒等,這篇文章中提供了豐富的遊玩資訊,包括門票資訊、行程安排、建議停車方式等。
Thumbnail
年假的最後一天,與幾位朋友到汐止最知名的登山景點~大尖山步道走走,海拔約460公尺的「大尖山」,又名"大針山"、"秀峰山",為台灣小百岳之一。大尖山步道有好幾個登山口,而位於山腰的天秀宮入口,是最為熱門的登山路線。從登山口到山頂共有1145階,看似會很辛苦的階梯,其實大約30分鐘以內就能征服這座
Thumbnail
題目會給定一個字串,問我們裡面最大的回文子字串內容為何? 本題目將用中心展開法來解題
Thumbnail
在家找到多年前姪女送我的日文版《經典日劇主題曲》雙CD,只看過少部分劇集,其他是只聞其名,或看過幾集,不是人家不好,因自己從小是廣播迷,接近21世紀才開始在網絡串流平台實時追劇,算是追不上潮流的老古董。
Thumbnail
我在天下學習新合作一個專欄,首篇文章上架,從解決問題的思維,帶入經典賽的心得。 經典賽》讓台灣不再「雖敗猶榮」!找出問題前,先學會解題思維 https://www.cwlearning.com.tw/posts/a08dce8e-f646-43cc-910c-a5f116d5e74c
Thumbnail
在987剛開始喝調酒時,因為久仰這款調酒在歐美的高人氣,就點了這杯具代表性的經典,喝下去第一口馬上眉頭皺起來...這也太苦了吧🥲八天德:這就是人生的味道阿(笑)。 尼格羅尼是由琴酒當基底,甜香艾酒(Sweet Vermouth )賦予藥草與果香的香甜味、再由金巴利(Campari)帶出藥草的苦味
Thumbnail
今天前往鐵男學長(陳峻賢老師)的讀書會, 在開場時陳老師提出了「企業經營與人生經營的連結」, 如果你是企業經營的人可以深入了解創辦人的企業治理, 而這樣的企業治理的許多思維可以幫助到我們的人生, 讓我印象深刻的是創辦人必要特質, 首先,情緒穩定,在企業治理當中,老闆不管面對什麼情境, 都要有著情緒的
Thumbnail
這杯以茶聞名的調酒大概是想喝醉的人最常點的了😜 混和了大量的烈酒,伏特加、琴酒、蘭姆酒、龍舌蘭酒、橙皮酒(Triple sec)各一份,再加上半分的檸檬汁以及適量的可樂,可樂的香甜跟檸檬的酸讓酒感很完美的被隱藏起來,同時也讓這杯酒有了"茶"色,但喝完一杯可等於喝了5個shot,想醉真的一杯就夠~
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
淡蘭古道一條清朝時候興建穿越宜蘭縣到台北市的古道。時至西元二零一八年梳理為「北路」、「中路」、「南路」三大路網。淡蘭古道中路被稱為民道。行經新北市平溪區十分地區至新北市雙溪區柑腳地區、泰平地區到宜蘭市外澳地區。古代人行經此路吃的、在注腳雙溪工作室重現經典淡蘭飯包,成為懷古的一種餐盒。 淡蘭飯包
Thumbnail
臺中音樂鈴博物館非常適閤家族旅遊,遊客可以參加DIY體驗、觀賞音樂盒等,這篇文章中提供了豐富的遊玩資訊,包括門票資訊、行程安排、建議停車方式等。
Thumbnail
年假的最後一天,與幾位朋友到汐止最知名的登山景點~大尖山步道走走,海拔約460公尺的「大尖山」,又名"大針山"、"秀峰山",為台灣小百岳之一。大尖山步道有好幾個登山口,而位於山腰的天秀宮入口,是最為熱門的登山路線。從登山口到山頂共有1145階,看似會很辛苦的階梯,其實大約30分鐘以內就能征服這座
Thumbnail
題目會給定一個字串,問我們裡面最大的回文子字串內容為何? 本題目將用中心展開法來解題
Thumbnail
在家找到多年前姪女送我的日文版《經典日劇主題曲》雙CD,只看過少部分劇集,其他是只聞其名,或看過幾集,不是人家不好,因自己從小是廣播迷,接近21世紀才開始在網絡串流平台實時追劇,算是追不上潮流的老古董。
Thumbnail
我在天下學習新合作一個專欄,首篇文章上架,從解決問題的思維,帶入經典賽的心得。 經典賽》讓台灣不再「雖敗猶榮」!找出問題前,先學會解題思維 https://www.cwlearning.com.tw/posts/a08dce8e-f646-43cc-910c-a5f116d5e74c
Thumbnail
在987剛開始喝調酒時,因為久仰這款調酒在歐美的高人氣,就點了這杯具代表性的經典,喝下去第一口馬上眉頭皺起來...這也太苦了吧🥲八天德:這就是人生的味道阿(笑)。 尼格羅尼是由琴酒當基底,甜香艾酒(Sweet Vermouth )賦予藥草與果香的香甜味、再由金巴利(Campari)帶出藥草的苦味
Thumbnail
今天前往鐵男學長(陳峻賢老師)的讀書會, 在開場時陳老師提出了「企業經營與人生經營的連結」, 如果你是企業經營的人可以深入了解創辦人的企業治理, 而這樣的企業治理的許多思維可以幫助到我們的人生, 讓我印象深刻的是創辦人必要特質, 首先,情緒穩定,在企業治理當中,老闆不管面對什麼情境, 都要有著情緒的
Thumbnail
這杯以茶聞名的調酒大概是想喝醉的人最常點的了😜 混和了大量的烈酒,伏特加、琴酒、蘭姆酒、龍舌蘭酒、橙皮酒(Triple sec)各一份,再加上半分的檸檬汁以及適量的可樂,可樂的香甜跟檸檬的酸讓酒感很完美的被隱藏起來,同時也讓這杯酒有了"茶"色,但喝完一杯可等於喝了5個shot,想醉真的一杯就夠~