摘要:通過使用,我們將無論是奇數還是偶數的回文串,都變成了一個以為中心,為半徑兩個方向擴展的問題。并且就是回文串的長度。
Given a string s, find the longest palindromic substring in s.
這題的意思是找出 最長連續回文串。
思路來源于此
這里描述了一個叫Manacher’s Algorithm的算法。
算法首先將輸入字符串S, 轉換成一個特殊字符串T,轉換的原則就是將S的開頭結尾以及每兩個相鄰的字符之間加入一個特殊的字符,例如#
例如: S = “abaaba”, T = “#a#b#a#a#b#a#”.
為了找到最長的回文字串,例如我們當前考慮以Ti為回文串中間的元素,如果要找到最長回文字串,我們要從當前的Ti擴展使得 Ti-d … Ti+d 組成最長回文字串. 這里 d 其實和 以Ti為中心的回文串長度是一樣的. 進一步解釋就是說,因為我們這里插入了 # 符號,對于一個長度為偶數的回文串,他應該是以#做為中心的,然后向兩邊擴,對于長度是奇數的回文串,它應該是以一個普通字符作為中心的。通過使用#,我們將無論是奇數還是偶數的回文串,都變成了一個以Ti為中心,d為半徑兩個方向擴展的問題。并且d就是回文串的長度。
代碼在控制臺調試如下:
首先對字符串進行處理,~是規避數組以0開頭,添加#號是為了規避字符串的單復數字節。
隨后找到回文字符串最中間的字節cs
再確定左右兩邊的字節個數
最后用數組方法Slice截取回文,用正則刪除#和~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87290.html
摘要:題目描述給定一個字符串,找到中最長的回文子串。你可以假設的最大長度為。示例輸入輸出注意也是一個有效答案。示例輸入輸出思路分析暴力解法解決一個問題如果沒有思路,就要想辦法從簡單粗暴的解法開始,然后想辦法優化它。 題目描述 https://leetcode-cn.com/probl... 給定一個字符串 s,找到 s 中最長的回文子串。你可以假設?s 的最大長度為 1000。 示例 1: ...
摘要:題目解析題目是要找出最長的回文字符串,拿到題目的第一反應是遍歷子串,然后一直替換最長的子字符串即可了。但是這種解法遇到極端輸入狀況就會超時,指定的最長長度為,遍歷子串需要兩次循環,判斷回文需要一次循環,所以總的效率為,那么極端狀況會超時。 題目 Given a string s, find the longest palindromic substring in s. You may ...
摘要:回文的意思就是反轉字符串后和原字符串相等。因為這種想法沒次都是兩邊同時擴展。所以要分目標字符串長度為奇數目標字符串為偶數兩種情況。 題目詳情 Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.題目的意思是輸入...
摘要:題目即求最長回文子序列原題鏈接此篇博客僅為學習記錄我的解法及代碼暴力解決,用及進行兩層遍歷循環中套一層循環,用遍歷,求最長回文序列字符串,同時用變量記錄最長子序列這種寫法很暴力,效率很低,一層循環,一層循環,回文序列對比一層,時間復雜度為辣 題目: Given a string s, find the longest palindromic substring in s. You ma...
摘要:這種解法中,外層循環遍歷的是子字符串的中心點,內層循環則是從中心擴散,一旦不是回文就不再計算其他以此為中心的較大的字符串。 Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length ...
閱讀 3581·2019-08-30 15:55
閱讀 1379·2019-08-29 16:20
閱讀 3662·2019-08-29 12:42
閱讀 2667·2019-08-26 10:35
閱讀 1015·2019-08-26 10:23
閱讀 3412·2019-08-23 18:32
閱讀 902·2019-08-23 18:32
閱讀 2899·2019-08-23 14:55