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"
- 为了减少循环迭代的次数,脚本从获取最长分片开始迭代,只要碰到回文字符串,则此回文字符串就是最长回文字符串,此时只需要返回该字符串并退出程序即可