Given a string s, return the longest palindromic substring in s.
解题思路
回文字符串性质1:如果一个字符串是回文,那么其子字符串s[1:-1]也是回文。
回文字符串性质2:回文字符串的总长度有奇偶之分,例如 abba 和 aba 。
我们可以遍历一遍字母及其下标,寻找是否有比string(已知的最长回文)更长的回文。具体如下。
根据性质1,当我们找到了较长回文时,我们必须找到了较短的子回文。较短的子回文,我们可以通过遍历字母找到,那如何找到较长的回文呢?
考虑性质2,所以每次遍历判断2种情况,去覆盖子回文所有可能产生长回文的情况。例如,当s = szabccbaerc, 当找到子回文 bccb 时,我们应该将 abccba (比子回文长度长2) 和 bccba (比子回文长度长1) 作为候选 1 和 2, 判断是否他们为回文。如果是,更新回文,也确保回文长度变长。从而既考虑了性质1, 也考虑了性质 2。
遍历完字母后,我们返回的string便为最长回文字符串。
实现
判断回文的条件:str==str[::-1]
Complexity
- 时间复杂度:O(n)
- 空间复杂度:O(n)
Code
1 | class Solution: |
结果
本方法 | |
---|---|
Runtime | 84 ms, faster than 98.83% of Python3 online submissions for Longest Palindromic Substring. |
Memory Usage | 14.3 MB, less than 59.41% of Python3 online submissions for Longest Palindromic Substring. |
References
[1] https://b23.tv/RTTEv8