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实现把xml或xsl转换为html格式
Apr 08 Python
详解Python中用于计算指数的exp()方法
May 14 Python
开始着手第一个Django项目
Jul 15 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
python http接口自动化脚本详解
Jan 02 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
python实现简单五子棋游戏
Jun 18 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 Python
python调用摄像头的示例代码
Sep 28 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
浅谈discuz密码加密的方式
2014/05/22 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
Jquery性能优化详解
2014/05/15 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
使用Python的PEAK来适配协议的教程
2015/04/14 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python如何建立全零数组
2020/07/19 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
追悼会子女答谢词
2014/01/28 职场文书
市场部管理制度
2014/02/02 职场文书
原材料检验岗位职责
2014/03/15 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫