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的类实例属性访问规则探讨
Jan 30 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
python获取文件扩展名的方法
Jul 06 Python
Python实现基本线性数据结构
Aug 22 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
Django实现网页分页功能
Oct 31 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 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
Search Engine Friendly的URL设计
2006/10/09 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
PHP crc32()函数讲解
2019/02/14 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
小程序实现列表删除功能
2018/10/30 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python 实现链表实例代码
2017/04/07 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
学校大课间活动方案
2014/01/30 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
mysql查看表结构的三种方法总结
2022/07/07 MySQL