题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
# -*- coding:utf-8 -*-
class Solution:
def getLongestPalindrome(self, A, n):
strList=list(A)
maxLen=1
for i in range(n): #最外层迭代首字母
for j in range(n-1,i,-1): #倒序迭代尾字母
#长度为n,最后一个字母的序号为n-1,range含头不含尾,不会检查自己
if strList[i]!=strList[j]: #如果不同,继续找和首字母相同的
continue #继续去找下一个尾字母
else: #如果相同,检查内部字符是否为回文
Flag=True #来确认是否走完
tempMaxLen=0
for k in range (i, j + 1): # 在该文字段内遍历
# 不用担心迭代过半,重复迭代,要计算长度
# 为了能迭代到尾部,必须+1
InnerHead = strList[k]
InnerTail = strList[j - (k - i)]
if InnerHead != InnerTail: # 如果不同
Flag=False
break
else:
continue
if Flag:
tempMaxLen = j - i + 1 # 只有走完了,才确认这个是回文
#每个首字母迭代一轮,都要输出一个最长长度
maxLen=max(tempMaxLen,maxLen)
return maxLen
- 核心在于两层嵌套迭代后,遍历内部string是否为回文。
- 正常情况下,要考虑内部回文单双数情况;但这里是要返回回文长度,所以遍历完正好返回长度
- maxLen比较,一定要首尾字母相同的情况下才更新(即最后max语句要对齐if strList[i]!=strList[j])