题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
判断是否回文,只需要判断两种情况:一种是每次再字符串里取两个连续相等字符(aa形式),分别向左向右扩展,判断回文长度;一种是取三个第一个第三个相等的字符(aba形式),分别扩展
b = [] #用来存放每次每次的寻找过程当下的回文长度,b的最大值就是在寻找过程中最长回文
def find_2(ori_list,left,right):
len_find_2 = right - left + 1 #当前回文长度
b.append(len_find_2) #放入b
if(left == 0) | (right == len(ori_list) - 1): #到边就返回
return 2
if(ori_list[left - 1] == ori_list[right + 1]): #向两边扩展
find_2(ori_list, left - 1, right + 1) #继续寻找
else: #发现两边不等了,那么返回
return 0
return 1
def find_3(ori_list,left,right): #找长度为3起步的回文aba形式
len_find_3 = right - left + 1
b.append(len_find_3)
if(left == 0) | (right == len(ori_list) - 1):
return 2
if(ori_list[left - 1] == ori_list[right + 1]):
find_3(ori_list, left - 1, right + 1)
else:
return 0
return 1
while True:
try:
a = list(input())
max_len = 0
for i in range(len(a) - 1):
if(a[i] == a[i + 1]): #每次取两个连续字符相等字符
find_2(a,i,i+1)
for i in range(len(a) - 2): #取aba形式
if(a[i] == a[i + 2]):
find_3(a,i,i+2)
max_len = max(b) #最大回文就是寻找过程中的最大值
print(max_len)
except:
break
华为机试题解(prod.by kedao) 文章被收录于专栏
华为实习机试题解