Leetcode_05【最长回文子串】

文章目录:

  • 题目
  • 脚本一及注释
  • 脚本一逻辑

 

题目:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"


脚本一及注释:【用时:4500ms】

class Solution:                          #leetcode固定模式:定义一个类
    def longestPalindrome(self, s: str) -> str:       #类中的方法及形参输入
        num1 = len(s)                       #获取给定字符串的长度
        if s == "":                        #若给定的字符串为空字符串
            return("")                      #则返回一个空字符串
        aa = 1                           #定义一个变量啊啊,并赋值为1,用于获取字符串分片
        for i in range(num1 - 1,-1,-1):            #此处for循环从给定字符串的个数的最大值开始,并且步长为-1
            for j in range(aa):                 #此处的aa变量决定循环的次数
                str1 = s[j:j+i+1]                #获取字符串对应的分片
                str2 = str1[::-1]                #字符串反转
                if str1 == str2:                 #判断两字符串是否一样
                    return(str1)                 #若一样,则返回此字符串
            aa = aa + 1                      #若不一样则变量aa增加一

脚本一逻辑:

  • 首先回文字符串的要求是字符串反转后是相等的,这一题笔者之前是使用shell来求解的,思路与这次不一样[https://blog.csdn.net/weixin_43428906/article/details/102654258],这是shell脚本的链接,它是采用了“逼近”的方法
  • 而此处是使用了“分片对比”的方法来获取最长回文字符串,下面介绍一下笔者的处理逻辑:
    • 最长回文字符串必定存在于字符串的某一位置,只需获取出来进行判断即可
    • 笔者使用“分片对比”的思想来获取最长回文字符串,比如:abbc可有的分片为:abbc、abb、bbc、ab、bb、bc、a、b、b、c、;其中最长的分片为"bb"
    • 为了减少循环迭代的次数,脚本从获取最长分片开始迭代,只要碰到回文字符串,则此回文字符串就是最长回文字符串,此时只需要返回该字符串并退出程序即可
posted @ 2019-12-07 19:29  弈虫  阅读(170)  评论(0编辑  收藏  举报