zoukankan      html  css  js  c++  java
  • 最长回文字串

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

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

    来源:https://leetcode-cn.com/problems/longest-palindromic-substring/

    法一: 自己的代码

    代码需要改进,实测中有得超时,无法通过.

    思路:利用for循环进行遍历所有的字符串,从外到内,即滑窗从大到小进行遍历,一旦遇到了回文字符串,返回该串,

    利用exit()立即终止程序,

    注意:滑窗是奇数和偶数时稍有不同,特别是为1的时候,无法用该方法判断只能用if单独判断

    # 暴力解法:
    # 思路:利用for循环进行遍历所有的字符串,从外到内,即滑窗从大到小进行遍历,一旦遇到了回文字符串,返回该串,
    # 利用exit()立即终止程序,
    # 注意:1 滑窗是奇数和偶数时稍有不同,特别是为1的时候,无法用该方法判断只能用if单独判断
    # 总结:下次写代码,不要首先就考虑暴力解法,要先考虑哪种算法运行时间最短,不要直接进行求解
    
    class Solution:
        def longestPalindrome(self, s):
            if len(s) in [ 0, 1]:
                return s
            else:
                for i in range(len(s)):  # i 为滑窗补集的长度   也是滑窗要移动的次数
                    # print(i)
                    start = 0
                    end = len(s) - i
    
                    # 因为i是从0开始,所以必须要加1才能实现第一次的滑窗运算,否则会直接跳过,因为range(0)不执行
                    for j in range( i + 1): # j 记录滑窗第几次移动
                        # print('j is', j)
                        # print('i is:', i)
                        mark = 1         # 标记为1,即先假设它是回文字符串
    
                        # print('lklk',end)
                        sliding_window_length = len(s) - i
                        if sliding_window_length == 1:
                            return s[0]
                            exit()
                        else:
                            # print(sliding_window_length)
                            for sliding_window_index in range(int(sliding_window_length / 2)):
                                sliding_window = s[start:end]
                                # print('sliding_window is ', sliding_window)
                                # print('sliding_window length is ', len(sliding_window))
                                # print(sliding_window[sliding_window_index])
                                # print(sliding_window_length - 1 - sliding_window_index)
                                # print(sliding_window[sliding_window_length - 1 - sliding_window_index])
                                # print(sliding_window)
                                if sliding_window[sliding_window_index] == sliding_window[sliding_window_length - 1 - sliding_window_index]:
                                    pass
                                else:
                                    mark = 0
                                    break
                            if mark == 1:    # 说明该滑窗字符串符合回文字符串,终止for循环、
                                return sliding_window
                                exit()
                            start = start + 1
                            end   = end + 1
    
    if __name__ == '__main__':
        # s = 'abcdcbadgghhhhhhhhhhhhhhhhhhhhhhh'
        print(len(s))
        duixiang = Solution()  # 先用类new出一个对象,再用对象调用类的方法
        print(duixiang.longestPalindrome(s))
    View Code
  • 相关阅读:
    总纲与计划(持续更新)
    【MyBatis】MyBatis缓存
    【MyBatis】MyBatis源码架构
    【JVM】CPU飙升问题
    【Spring boot】SpringApplication三板斧
    【MySQL】借助binlog排查一次生产问题
    【Docker】常用命令
    【Python】CentOS7安装Python3.7以及注意事项
    【高并发】乐观锁和悲观锁
    【java基础】说清楚equals和==
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11173191.html
Copyright © 2011-2022 走看看