输出字符串中的最长回文子串

示例:

输入:"acbbc" ,输出:"cbbc"

输入:"a",输出:"a"

Python解决方案1:

  设置滑动窗口,逐渐减小滑动窗口的大小

    def longestPalindrome(s):
        if len(s) <= 1:
            return s
        sub_len = len(s)
        while sub_len > 1:
            for i in range(len(s)-sub_len+1):
                sub_s = s[i:i+sub_len]
                if s[i] == s[i+sub_len-1] and sub_s == sub_s[::-1]:
                    return sub_s
            sub_len -= 1
        return s[0]

Python解决方案2:

  从中间开始,分别向两边搜索回文序列

  def longestPalindrome(s):
        if len(s) <= 1:
            return s

        s = "*" + "*".join(s) +"*"
        mid = len(s) // 2 
        longest = ""
        left_mid = mid
        right_mid = mid
        while len(longest) < 2*left_mid+1:
            start_left = left_mid
            end_left = left_mid
            while start_left >=0 and s[start_left] == s[end_left]:
                start_left -= 1
                end_left += 1
            if end_left-start_left-1 > len(longest):
                longest = s[start_left+1:end_left]
            if right_mid != left_mid:
                start_right = right_mid
                end_right = right_mid
                while end_right < len(s) and s[start_right]==s[end_right]:
                    start_right -= 1
                    end_right += 1
                if end_right - start_right - 1 > len(longest):
                    longest = s[start_right+1:end_right]
            left_mid -= 1
            right_mid += 1
        out = longest.replace("*","")
        return out

第二种方案运行效率更高

原文地址:https://www.cnblogs.com/wenqinchao/p/10523770.html