题目描述
给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。
所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串
(注意:记得加上while处理多个测试用例)
输入描述:
输入一个仅包含小写字母的字符串
输出描述:
返回最长回文子串的长度
示例1
输入
cdabbacc
输出
4
说明
abba为最长的回文子串
算法:
1、最大回文子串的一半:
cdabbacc #完整字符串
abba #最长的回文子串
str_new = ab #半串
str1 #假设给定一个字符串
a,b = divmode(len(str),2) #a为可能的最大半串长度
遍历,如果不满足回文子串就不断减小 半串长度,递归
代码实现如下:
#str1:字符串,length:对称子串长度
def str_same(str1,length,len1):
if length < 0:
return length
if length == 0:
return 1
flag = False
a1,b1 = divmod(len1,2)
for i in range(a1):
if i+length+length <=len1:
str_new1 = str1[i:i+length]
start1 = i+length
end1 = i+length+length
str_new2 = str1[start1:end1]
str_new3 = str_new2[::-1]
if str_new1 == str_new3:
flag = True
break
else:
pass
if flag == True:
return length
else:
return str_same(str1,length-1,len1)
lists = []
while True:
try:
a = input()
if a.islower():
lists.append(a)
except:
break
for i in lists:
num = len(i)
len_str = 0
a,b = divmod(num,2)
len_str = str_same(i,a,num)
if len_str == 1:
print(len_str)
else:
print(len_str*2)