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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python中暂存上传图片的方法
Feb 18 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
python使用sqlite3时游标使用方法
Mar 13 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
python exit出错原因整理
Aug 31 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 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
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
Django中的ajax请求
2018/10/19 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python实现分段线性插值
2018/12/17 Python
python3 下载网络图片代码实例
2019/08/27 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
优秀员工评语
2014/02/10 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
党员创先争优活动总结
2014/05/04 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL