题解 | #密码截取#
密码截取
http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
# 从右到左,对每个字符进行遍历处理,并且每个字符要处理两次,因为回文子串有两种情况:
# ABA型:只需要从当前字符向两边扩散,比较左右字符是否相等,找出以当前字符为中心的最长回文子串长度
# ABBA型:只需要从当前字符和下一个字符向两边扩散,比较左右字符是否相等,找出以当前字符和下一个字符为中心的最长回文子串长度
# 最后比对两种类型的长度,取自较长的长度
out = 0
for i in range(0, len(s)): # 双指针
k = i - 1
j = i + 1
len_ABA = 1
while k >= 0 and j < len(s):
if s[k] == s[j]:
k -= 1
j += 1
len_ABA += 2
else:
break
k = i
j = i + 1
len_ABBA = 0
while k >= 0 and j < len(s):
if s[k] == s[j]:
k -= 1
j += 1
len_ABBA += 2
else:
break
now_len = max(len_ABA, len_ABBA)
if out <now_len:
out = now_len
print(out)