题解 | #最长回文子串#

最长回文子串

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) 文章被收录于专栏

华为实习机试题解

全部评论
厉害啊,这个差了点,但是比马拉车容易理解
点赞 回复 分享
发布于 2022-06-21 20:20

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务