题解 | #最长回文子串#

最长回文子串

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

相关推荐

大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
VirtualBool:都去逗他了?
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务