【发布时间】:2021-02-14 02:00:14
【问题描述】:
我正在使用 python,我必须编写一个函数来查找字符串列表中最长的公共前缀字符串。
例如,输入参数是["flower", "flow", "flight"],
输出为"fl"。如果输入字符串之间没有公共前缀,
输出是一个空字符串。
【问题讨论】:
标签: python
我正在使用 python,我必须编写一个函数来查找字符串列表中最长的公共前缀字符串。
例如,输入参数是["flower", "flow", "flight"],
输出为"fl"。如果输入字符串之间没有公共前缀,
输出是一个空字符串。
【问题讨论】:
标签: python
您可以将字符串压缩在一起zip(*list_o_strings),这将为您提供像('f', 'f', 'f') 这样的元组。如果你将它们传递给一个集合,当所有字母都相同时,该集合将只有一个值。只需在该拉链上循环,直到找到长度大于 1 的集合。
def common_prefix(l):
s = ''
for c, *rest in map(set, zip(*l)):
if rest: # rest will be empty of the set is shorter than 1
return s
s += c
common_prefix(["flower", "flow", "flight"])
# 'fl'
common_prefix(["flower", "flow", "flog"])
# 'flo'
common_prefix(["glower", "flow", "flight"])
# ''
【讨论】:
def get_prefix_str(str_list):
# take first string as reference and compare each char with the corresponding char of the rest of strings
prefix_str = ''
len_smallest_str = min([len(str_mem) for str_mem in str_list])
for i in range(len_smallest_str):
if len([0 for ind in range(1, len(str_list)) if str_list[0][i] != str_list[ind][i]]) > 0:
break
prefix_str += str_list[0][i]
return prefix_str
for str_list in [["flower", "flow", "flight"], ["lower", "low", "light"], ["ower", "ow", "ight"]]:
print(str_list)
prefix_str = get_prefix_str(str_list)
print(f'Prefix is {prefix_str}')
输出:
['flower', 'flow', 'flight']
Prefix is fl
['lower', 'low', 'light']
Prefix is l
['ower', 'ow', 'ight']
Prefix is
【讨论】: