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