博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长回文字串
阅读量:4886 次
发布时间:2019-06-11

本文共 2578 字,大约阅读时间需要 8 分钟。

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

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

来源:

法一: 自己的代码

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

思路:利用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 + 1if __name__ == '__main__':    # s = 'abcdcbadgghhhhhhhhhhhhhhhhhhhhhhh'    print(len(s))    duixiang = Solution()  # 先用类new出一个对象,再用对象调用类的方法    print(duixiang.longestPalindrome(s))
View Code

 

转载于:https://www.cnblogs.com/xxswkl/p/11173191.html

你可能感兴趣的文章
Hadoop 下常用的命令
查看>>
python经典面试题:想找工作?这些面试题你会了吗?
查看>>
[转]MySQL索引详解(2)
查看>>
php交互篇(二)session 与 cookie
查看>>
【Java Saves!】Session 6:十六指星人
查看>>
Android 获取手机通讯录信息 — 姓名和号码
查看>>
CSS控制文本自动换行
查看>>
httpclient文件下载
查看>>
WEB安全学习二、注入工具 sqlmap的使用
查看>>
自己收藏的一些网址
查看>>
ZT UML 类与类之间的关系
查看>>
SQL Server 索引和视图
查看>>
Codeforces Round #296 (Div. 2) A. Playing with Paper
查看>>
windows-install-python-and-sphinx(*.rst file)
查看>>
UML各种图总结-精华
查看>>
jquery $.each()用法
查看>>
我的软考之路(四)——数据结构与算法(2)之树与二叉树
查看>>
Effective C++_笔记_条款02_尽量以const、enum、inline替换#define
查看>>
spring-hadoop之操作hbase
查看>>
dom 解析 XML
查看>>