题解 | #密码截取#

密码截取

http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

回文即对称只有两种形式:aa类和aca类,其他的都是以上两类为拓展,所以从所给的字符串里面选择长度为2和长度为3的字符,再向两边延申,再比较是否回文

while True:
    try:
        s = input()
        res = 1#初始为1,即使单个字符,对称字符的长度就是一
        for lenth in range(2,4):#窗口为2或者窗口为3
            for i in range(len(s)-lenth+1): #从0到lenS-lenth取长度为lenth的字符串片段
                if s[i:i+lenth] == s[i:i+lenth][::-1]: #判断是否回文
                    for x in range(min(i,len(s)-i-lenth)+1): #向两边拓展,要注意两边是否还有拓展的余地,即两边还能各加多少(取最小值)
                        if s[i-x:i+lenth+x] == s[i-x:i+lenth+x][::-1]: #若是相同
                            res = max(res,lenth+2*x) #取现有的res和新得到的回文大小的最大值
                        else:
                            break
        print(res)
    except:
        break
华为机试题解(prod.by kedao) 文章被收录于专栏

华为实习机试题解

全部评论
请教一下,为什么这里要取最小值? for x in range(min(i,len(s)-i-lenth)+1): #向两边拓展,要注意两边是否还有拓展的余地,即两边还能各加多少(取最小值)
点赞 回复 分享
发布于 2023-01-10 21:34 浙江

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
9
2
分享

创作者周榜

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