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 循环遍历字典元素的简单方法
Sep 11 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Python如何实现定时器功能
May 28 Python
Python多线程正确用法实例解析
May 30 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
如何利用Python实现一个论文降重工具
Jul 09 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 全局变量范围分析
2009/08/07 PHP
深入PHP FTP类的详解
2013/06/13 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
物业管理求职自荐信
2013/09/25 职场文书
研究生自我鉴定范文
2013/10/30 职场文书
高一化学教学反思
2014/02/05 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python