LeetCode:Longest Palindromic Substring

第五题是求字符串里的最大回文子串,回文串(Palindromic Substring)就是例如”aba”,“abba”这种,网上有很多使用解决方法,比如使用动归,kmp的变种等解法,时间复杂度从O(n^3)甚至到O(n)。

我这里的结题思路是,对字符串里的每一个字符向两边展开,字符串长度增加的条件如下:

  • 如果s[end] == s[end+1],end++,长度加1

  • 如果s[begin-1] == s[end +1], begin–且end++,长度加2

  • 注意循环过程中end小于len(s)-1,begin大于0

代码如下:


    #! /usr/bin/env python
    # -*- coding -*-

    class Solution(object):
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            length = len(s)
            max_len = 0
            index = 0
            if length == 0 or length == 1:
                return s
            for i in range(0, length):
                begin = i
                end = i
                while end < length - 1 and s[end] == s[end+1]:
                    end = end + 1
                while end < length - 1 and begin > 0 and s[begin - 1] == s[end + 1]:
                    begin = begin - 1
                    end = end + 1
                if max_len < end - begin + 1:
                    max_len = end - begin + 1
                    index = begin

            return s[index:index + max_len]

    if __name__ == "__main__":
        s = Solution();
        print s.longestPalindrome('aabcbcbaacbeeeeeeeeebc')

因为使用了两层循环,所以时间复杂度是O(n),网上也有同学做到了复杂度为O(n),我赶紧去膜拜学习一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值