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开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
Python实现线程状态监测简单示例
Mar 28 Python
多个应用共存的Django配置方法
May 30 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python循环结构的应用场景详解
Jul 11 Python
HTML的form表单和django的form表单
Jul 25 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 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
单点登录 Ucenter示例分析
2013/10/29 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php实现可运算的验证码
2015/11/10 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python 变量类型及命名规则介绍
2013/06/08 Python
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python中对_init_的理解及实例解析
2019/10/11 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
python如何实现DES加密
2020/09/21 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
电信专业毕业生推荐信
2013/11/18 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android