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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
十条建议帮你提高Python编程效率
Feb 16 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
python读写配置文件操作示例
Jul 03 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
Python中的__init__作用是什么
Jun 09 Python
Python 爬虫性能相关总结
Aug 03 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
YII实现分页的方法
2014/07/09 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
php中数组最简单的使用方法
2020/12/27 PHP
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
初识Node.js
2015/03/20 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
浅谈js原生拖放
2016/11/21 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
关于反爬虫的一些简单总结
2017/12/13 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python读取图片任意范围区域
2019/01/23 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
什么是网络协议
2016/04/07 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书