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 内置字符串处理函数的使用方法
Jun 11 Python
Python中对列表排序实例
Jan 04 Python
Python功能键的读取方法
May 28 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
使用python制作一个解压缩软件
Nov 13 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
Python实现双向链表基本操作
May 25 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
符合标准的js表单提交的代码
2007/09/13 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
python模块之paramiko实例代码
2018/01/31 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
求职简历自荐信
2013/10/20 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
资料员岗位职责范本
2015/04/13 职场文书
遗愿清单观后感
2015/06/09 职场文书
《月光曲》教学反思
2016/02/16 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers