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跳出循环语句continue与break的区别
Aug 25 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
Python找出list中最常出现元素的方法
Jun 14 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
matlab xlabel位置的设置方式
May 21 Python
Python激活Anaconda环境变量的详细步骤
Jun 08 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
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
shiro授权的实现原理
2017/09/21 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Zookeeper接口kazoo实例解析
2018/01/22 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
css3 transform属性详解
2014/09/30 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
高二政治教学反思
2014/02/01 职场文书
工程索赔意向书
2014/08/30 职场文书
导游词之清晏园
2019/11/22 职场文书