zoukankan      html  css  js  c++  java
  • 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"
      • 为了减少循环迭代的次数,脚本从获取最长分片开始迭代,只要碰到回文字符串,则此回文字符串就是最长回文字符串,此时只需要返回该字符串并退出程序即可
  • 相关阅读:
    趣谈编程史第4期-饱受争议的前端之王JavaScript的血泪成长史
    趣谈编程史第2期-这个世界缺少对C语言的敬畏,你不了解的C语言科普
    趣谈编程史第1期-跌宕起伏的java帝国史,剖析谷歌甲骨文长达8年的版权战争
    记录一次Metaspace扩容引发FGC的调优总结
    多线程学习笔记-深入理解ThreadPoolExecutor
    使用CompletableFuture优化你的代码执行效率
    Linux+Shell常用命令总结
    Guava Cache探索及spring项目整合GuavaCache实例
    将List按照指定大小等分的几种实现方式和效率对比及优化
    Spring的事件机制详解
  • 原文地址:https://www.cnblogs.com/mailong/p/12003069.html
Copyright © 2011-2022 走看看