雪花徐徐飘下,如芦花,似柳絮,像轻悠悠的鹅毛,无尽无休地飘着,飘着,宛如那美丽的银蝶在院中翩翩起舞,又像一群穿白纱裙的小舞女,伴着天空传来的仙乐,轻轻盈盈地在空中飘舞着,旋转着,跳着动人的舞蹈。那么轻快的身影,那么飘逸的舞姿,每一片晶莹的雪花都像一曲婉转、悠扬、清新的轻音乐,都仿佛是一首轻快、和谐、明丽的小诗。哦,神奇的小雪花……
本文实例讲述了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程序设计有所帮助。
到此这篇关于Python3最长回文子串算法示例就介绍到这了。与积极的人在一起,可以让我们心情高昂。更多相关Python3最长回文子串算法示例内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!