zoukankan      html  css  js  c++  java
  • 输出字符串中的最长回文子串

    示例:

    输入:"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

    第二种方案运行效率更高

  • 相关阅读:
    iOS-申请开发证书流程
    iOS-代理
    进程和线程
    iOS单例模式
    Switch语句
    枚举类型
    程序的三种结构
    运算符
    Swift项目开发中的一些必备数据
    Swift开发中常用的一些图片处理方法
  • 原文地址:https://www.cnblogs.com/wenqinchao/p/10523770.html
Copyright © 2011-2022 走看看