题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

补充题目描述
Catcher 是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

(注意:记得加上while处理多个测试用例)

输入描述:
输入一个字符串

输出描述:
返回有效密码串的最大长度

方法1:python
本人写的代码,有一个测试用例无法通过。

while True:
    try:
        a = input()
        b = a.split()
        b = "".join(b)
        alist = list(b)
        maxhui = 0
        for start in range(len(a)):
            for end in range(start + 1, len(a)):
                aL = alist[start:end + 1]
                aR = alist[start:end + 1]
                aR.reverse()
                outList = aL + aR
                outstr = ''.join(outList)
                if outstr in a:
                    if len(outstr) > maxhui:
                        maxhui = len(outstr)
        print(maxhui)


    except:
        break

方法2: 高手解法。搬砖

n = input()
c_m = 0
for i in range(0, len(n) - 1):
    c = 0
    j = i - 1
    m = i + 1
    if n[i] == n[m]:
        j = i
    elif n[i] == n[j]:
        m = i
    else:
        c = 1
    while (j > 0) and (m < len(n)):
        if n[j] == n[m]:
            c += 2
        else:
            break
        j -= 1
        m += 1
    if c > c_m:
        c_m = c
print(c_m)
全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务