问题
该问题是力扣上一道中等难度的题目,但是方法却有多样,值得记录一下。题干如下:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
下面给出三种方法:暴力解法,中心扩散和动态规划。
解答
暴力解法
首先想到的就是无脑的暴力解法,从左到右遍历,记初始的一个字符串长度为 1 ,当遍历找到一个回文子串时,字符串的长度加一,不断增加知道找不到该长度的回文子串。这个方法比较好想出来,但是由于遍历的原因,时间复杂度较高,运算的时间也就较高。
判断是否为回文子串的方法是分两种情况:
-
字符串长度 n 为奇数,0 到 n − 1 2 \frac{n-1}{2} 2n−1与 n + 1 2 \frac{n+1}{2} 2n+1 到 n 的子串是倒置的关系,只需要判断一下即可验证是否为回文数串;
-
字符串长度 n 为偶数,将字符串分为等距两段,判断是否为倒置关系。
其代码如下:
def judge_Palindrome(s):
if len(s) % 2 == 1: # odd
if s[0:int(len(s) / 2)] == s[:int(len(s) / 2):-1]:
return True
else:
return False
elif len(s) % 2 == 0: # even
if s[0:int(len(s) / 2)] == s[-1