LeetCode每日一题——T5. 最长回文子串(中):中心扩散法、未完待续
2019-07-01 16:14
387 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41514090/article/details/94395731
法一、中心扩散法:以字符串某元素(奇数扩散中心,对应子串长度为奇数)或某两相同元素中间(偶数扩散中心,对应子串长度为偶数)为中心,分别向两端扩散,如果两端元素相同,则继续扩散,不相同则退出,保留当前子串;更换中心元素,直至找到最长回文子串。
class Solution: def longestPalindrome(self, s: str) -> str: s_len = len(s) if s_len == 0: return '' _palindrome_len = 1 _palindrome_str = s[0] for i in range(s_len): palindrome_odd, odd_len = self._center_spread(s, s_len, i, i) palindrome_even, even_len = self._center_spread(s, s_len, i, i+1) # 调用函数,分别以s[i](子串长度为奇数)、s[i]和s[i+1]的中间(长度为偶数)为中心进行扩散,寻找最长回文子串 cur_max_str = palindrome_odd if odd_len > even_len else palindrome_even if len(cur_max_str) > _palindrome_len: _palindrome_len = len(cur_max_str) _palindrome_str = cur_max_str return _palindrome_str def _center_spread(self, s , s_len, left, right): # 定义寻找最长回文子串函数 l = left r = right while l >= 0 and r < s_len and s[l] == s[r]: l -= 1 r += 1 return s[l+1 : r], r - l - 1 # 注意此处s[l+1 : r]是输出s[l+1], s[l+2], ... s[r-1]
相关文章推荐
- Leetcode5 -- 最长回文子串 -- Python -- 中心扩散法
- LeetCode 5 最长回文子串(字符串、中心扩展)
- LeetCode算法之最长回文子串(中心扩展算法)
- 【leetcode每日一题】【2019-04-16】5.最长回文子串
- leetcode每日一练:最长回文子串(java)
- leetcode 最长回文子串
- LeetCode刷题笔记5:最长回文子串(Python实现)
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
- 最长回文子串 leetcode 05 DP解法
- Leetcode每日一道 -- 无重复字符的最长子串
- LeetCode-最长回文子串
- leetcode 第五题 最长回文子串
- leetcode 5.最长回文子串
- [LeetCode] Longest Palindromic Substring 最长回文子串
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
- leetcode 005 最长回文子串
- LeetCode Longest Palindromic Substring(最长回文子串)
- LeetCode5. 最长回文子串(Java)
- leetcode5 最长回文子串
- LeetCode-5 最长回文子串