第四章:如何寻找最长回文子串

labuladong 如何寻找最长回文子串

5. 最长回文子串

  • 回文串的长度可能是奇数也可能是偶数,如果是 abba这种情况,没有一个中心字符。所以可以:
    • 找到以 s[i] 为中心的回文串(对奇数回文串),
      找到以 s[i] 和 s[i+1] 为中心的回文串(对偶数回文串),
      更新答案
  • 选择最长的回文串,保存在res中
class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        def palindrome(s,l,r):
            # 若左右指针没越界,且元素相等,则指针向两边扩散
            while l>=0 and r<len(s) and s[l]==s[r]:
                    l-=1
                    r+=1
            return s[l+1:r]

        res=""
        for i in range(len(s)):
            s1=palindrome(s,i,i)
            s2=palindrome(s,i,i+1) #这里越界无所谓,因为调用palindrome时已经不满足while条件,可直接跳出
            # 选择最长的回文串保存在res中
            res=res if len(res)>len(s1) else s1
            res=res if len(res)>len(s2) else s2
        return res

   转载规则


《第四章:如何寻找最长回文子串》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
第四章:如何判定括号合法性 第四章:如何判定括号合法性
labuladong 如何判定括号合法性 解题思路:遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号(栈顶元素),看是否匹配。 20. 有效的括号Krahets的极简思路及实现 栈 stack 为空: 此时 stack.pop() 操作
2020-07-13
下一篇 
第四章:如何k个一组反转链表 第四章:如何k个一组反转链表
labuladong如何k个一组反转链表 25. K 个一组翻转链表 利用栈先进后出,反转k个一组的链表 stack中存放的是ListNode 虽然存放在stack中,但ListNode之间的指向关系仍然保留 以 1->2-&
2020-07-13
  目录