首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高分!来自ACM 2017

高分!来自ACM 2017
EN

Stack Overflow用户
提问于 2017-11-03 09:14:30
回答 1查看 39关注 0票数 0
代码语言:javascript
复制
    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)

我得到了一个名字列表,我需要找到适用于每个名字的通用前缀。我的程序可以工作,但总是返回一个字母,而不是应该返回的字母。为什么会出现这种情况,我该如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2017-11-03 09:32:24

如果当前前缀与输入的所有名称都匹配,则再添加一个字符。当它不匹配时,您将中断循环-但导致失败的字符仍然附加到prefix的末尾。

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

代码语言:javascript
复制
prefix = prefix[:-1]  # python slice notation - remove the last element

你的代码有一些风格问题。这些问题最好在CodeReview上解决,而不是Stackoverflow。

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

代码语言:javascript
复制
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“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47086990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档