最长回文字串

题目:给定一个字符串 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

 

posted on 2019-07-11 22:23  吃我一枪  阅读(220)  评论(0编辑  收藏  举报

导航