• 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"
      • 为了减少循环迭代的次数,脚本从获取最长分片开始迭代,只要碰到回文字符串,则此回文字符串就是最长回文字符串,此时只需要返回该字符串并退出程序即可
  • 相关阅读:
    【转】Android应用开发allowBackup敏感信息泄露的一点反思
    【转】YUV420P的格式以及转换为RGB565的代码(Android摄像头的输出一般为YUV420P)
    Android存储访问及目录
    【转】Android仿QQ截图应用测试
    【转】[Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
    关于RGB转换YUV的探讨与实现
    Android Butterknife框架配置
    【转】android错误 aapt.exe已停止工作的解决方法
    如何屏蔽Button setClickable与setEnabled
    Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
  • 原文地址:https://www.cnblogs.com/mailong/p/12003069.html
Copyright © 2020-2023  润新知