首页 > 编程 > Python > 正文

Python3最长回文子串算法示例

2020-01-04 13:34:35
字体:
来源:转载
供稿:网友

本文实例讲述了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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表