Python3最长回文子串算法示例


Posted in Python onMarch 04, 2019

本文实例讲述了Python3最长回文子串算法。分享给大家供大家参考,具体如下:

1. 暴力法

思路:对每一个子串判断是否回文

class Solution:
  def longestPalindrome(self, s):
    """
    :type s: str
    :rtype: str
    """
    if len(s) == 1:
      return s
    re = s[0]
    for i in range(0,len(s)-1):
      for j in range(i+1,len(s)):
        sta = i
        end = j
        flag = True
        while sta < end:
          if s[sta] != s[end]:
            flag = False
            break
          sta += 1
          end -= 1
        if flag and j-i+1 > len(re):
          re = s[i:j+1]
    return re

提交结果:超出时间限制

2. 动态规划法

思路:

m[i][j]标记从第i个字符到第j个字符构成的子串是否回文,若回文值为True,否则为False.

初始状态 s[i][i] == True,其余值为False.

当 s[i] == s[j]  and m[i+1][j-1] == True 时,m[i][j] = True

class Solution:
  def longestPalindrome(self, s):
    """
    :type s: str
    :rtype: str
    """
    k = len(s)
    matrix = [[False for i in range(k)] for j in range(k)] 
    re = s[0:1]
    for i in range(k):
      for j in range(k):
        if i==j:
          matrix[i][j] = True
    for t in range(1,len(s)):       #分别考虑长度为2~len-1的子串(长串依赖短串的二维数组值)
      for i in range(k):
        j = i+t
        if j >= k: 
          break
        if i+1 <= j-1 and matrix[i+1][j-1]==True and s[i] == s[j]:
          matrix[i][j] = True
          if t+1 > len(re):
            re = s[i:j+1]
        elif i+1 == j and j-1 == i and s[i] == s[j]:
          matrix[i][j] = True
          if t+1 > len(re):
            re = s[i:j+1]
    return re

执行用时:8612 ms

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
如何在python中使用selenium的示例
Dec 26 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
Python构建图像分类识别器的方法
Jan 12 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
pytorch的batch normalize使用详解
Jan 15 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
python实现代码审查自动回复消息
Feb 01 Python
分析Python list操作为什么会错误
Nov 17 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python地图绘制实操详解
Mar 04 #Python
Python基于opencv实现的简单画板功能示例
Mar 04 #Python
python绘制漏斗图步骤详解
Mar 04 #Python
详解Python字典的操作
Mar 04 #Python
Python提取频域特征知识点浅析
Mar 04 #Python
python快排算法详解
Mar 04 #Python
Django 内置权限扩展案例详解
Mar 04 #Python
You might like
?算你??的 PHP 程式大小
2006/12/06 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
WAF的正确bypass
2017/01/05 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
python实现图片批量剪切示例
2014/03/25 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python实现图片转字符画的完整代码
2021/02/21 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
2014年中职班主任工作总结
2014/12/16 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
golang 实现时间戳和时间的转化
2021/05/07 Golang
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
Python os和os.path模块详情
2022/04/02 Python