Python找回文子串的方法
1、雙指標兩邊擴充套件
遍歷指標為i, j=i+1, i左移,j右移。判斷是否相等將長度,下標賦給臨時變數,最後切片返回。唯一的大坑。迴文字串長度可以是奇數也可以是偶數。奇數的時候,內層迴圈從i-1開始。邊界條件也需要處理好。
class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ n = len(s) maxL, maxR, max = 0, 0, 0 for i in range(n): # 長度為偶數的迴文字串 start = i end = i + 1 while start >= 0 and end < n: if s[start] == s[end]: if end - start + 1 > max: max = end - start + 1 maxL = start maxR = end start -= 1 end += 1 else: break # 長度為奇數的迴文子串 start = i - 1 end = i + 1 while start >= 0 and end < n: if s[start] == s[end]: if end - start + 1 > max: max = end - start + 1 maxL = start maxR = end start -= 1 end += 1 else: break return s[maxL:maxR+1]
2、Manacher演算法
由於在輸入預處理的步驟中,將所有的迴文子字元已經轉為奇數長度。所以在下面的操作中,只需要將輸入的每一個字元,都當做一個迴文子字元的中心位即可。不需要考慮偶數長度的迴文子字元。
''' @author: Yizhou Zhao ''' # 設定 radius[i] = 1, 因為字元本身也是一個迴文數 radius[i] = 1 while(string[i-radius[i]] == string[i+radius[i]]): radius[i] += 1
以上就是Python找回文子串的方法,希望對大家有所幫助。更多Python學習指路:
本文教程操作環境:windows7系統、Python 3.9.1,DELL G3電腦。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2830129/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 回溯演算法 LeetCode 131 分割回文子串演算法LeetCode
- leetcode------分割回文串LeetCode
- Amazon面試題:尋找最長迴文子串面試題
- LeetCode-131-分割回文串LeetCode
- Python小技巧 - 子串查詢Python
- LeetCode 分割回文串II(動態規劃)LeetCode動態規劃
- 子串位置
- leetcod 131.分割回文串(回溯、迴文字串)字串
- Java 的字串和子串Java字串
- 子串查詢
- 查詢子串
- 最長子串
- Python3字串方法Python字串
- 判斷一個字串是否包含一個子串的方法字串
- 【LeetCode刷題(困難程度)】132. 分割回文串 IILeetCode
- URAL 1297. Palindrome(字尾陣列求最大回文串)陣列
- 子串查詢;及排列子串分析
- 變數子串的常用操作變數
- 刪除字串中的子串字串
- Python中基於匹配項的子列表列表串聯Python
- poj3080-kmp+列舉子串 求最長公共子串KMP
- 子序列與子串問題總結
- lCS(最長公共子串)
- 04.子串,啟動!
- [leetcode 30 串聯所有單詞的子串 10ms]LeetCode
- 兩個字串的最長公共子串字串
- c++ : 獲得string的子串C++
- 無重複字元的最長子串字元
- Python連線兩個字串並去除首尾重複子串Python字串
- java 最長迴文子串Java
- #103. 子串查詢
- 糖果;及子串查詢分析
- 子串查詢函式strstr函式
- 76. 最小覆蓋子串
- Python 類變動的鉤子方法Python
- java無重複字元的最長子串Java字元
- 3 無重複字元的最長子串字元
- POJ 3294 Life Forms(字尾陣列求k個串的最長子串)ORM陣列