高分数!来自ACM 2017

时间:2017-11-03 01:14:30

标签: python python-3.x

    testcases = int(input())
for i in range(testcases):
    n = int(input())
    names = []
    for a in range(n):
        names.append(input())
    prefix = ''
    for b in range(len(names[0])):
        for c in names:
            if c.startswith(prefix) == True:
                common = True
            else: common = False
        if common == False:
                break
        prefix += names[0][b]
    print(prefix)

我得到了一个名单列表,我需要找到适用于每个名字的公共前缀。我的程序有效,但总是会返回比应该在那里多一个字母。为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:0)

如果当前前缀与所有输入的名称匹配,则为其添加一个字符。当它无法匹配时,你会突破循环 - 但导致失败的角色仍然附加在prefix的末尾。

有多种方法可以解决这个问题,但有一种可能性就是通过在循环外添加此语句来删除最后一个字符:

prefix = prefix[:-1]  # python slice notation - remove the last element

您的代码存在一些样式问题。这些最好用CodeReview而不是Stackoverflow来解决。

我会这样做(在用硬编码的测试用例替换输入语句之后):

x = ["Joseph", "Jose", "Josie", "Joselyn"]

n = 0
try:
    while all(a[n] == x[0][n] for a in x[1:]):
        n += 1
except IndexError:
    pass
print(x[0][:n])

此脚本打印“Jos”。