网络编程
位置:首页>> 网络编程>> Python编程>> Python3最长回文子串算法示例

Python3最长回文子串算法示例

作者:gxnustc  发布时间:2023-05-27 14:17:10 

标签:Python,回文,算法

本文实例讲述了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程序设计有所帮助。

来源:https://blog.csdn.net/aawsdasd/article/details/80484938

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com