gpt4 book ai didi

python - 查找 "random"字符串列表中至少 2 个元素上存在的最长前缀

转载 作者:行者123 更新时间:2023-11-30 22:26:58 25 4
gpt4 key购买 nike

给定一个字符串列表,例如:

myList = ["foo", "foobar", "football", "footbag", "bar"]

查找列表中至少 2 个字符串中存在的最长前缀:

Longest prefix is "footba" present in "football" and "footbag"

该列表将通过输入来填充,并且并非所有输入都具有共同的前缀。

要被视为一个选项,前缀出现在列表中的两个字符串上就足够了。如果有多个选项,则必须返回最长的一个。

在我的研究中,我已经找到了如何获取所有字符串的最长公共(public)前缀,例如:

列表:["foo_a","foo_b","foo_c","fnord"]

输出:Longest common prefix is "f"

但是,我的列表中的字符串可能甚至不以相同的字母开头。

最佳答案

你可以建立一个 prefix trie 的森林s,然后搜索具有两个(非空)子节点的最深节点的“高度”(距离根有多远)。该节点代表最长的公共(public)前缀。

如果您不关心性能,您可以简单地迭代列表中的所有单词,并将每个单词(其前缀)与其余单词进行比较,同时不断更新最大值:

def common_prefix_size(s1, s2):
res, i = 0, 0
while i < min(len(s1), len(s2)):
if s1[i] == s2[i]:
res += 1
i += 1
else:
break
return res



def longest_prefix(lst):
res = ''
maxsize = 0
for i in range(len(lst) - 1):
for j in range(i + 1, len(lst)):
t = common_prefix_size(lst[i], lst[j])
maxsize = max(maxsize, t)
if maxsize == t:
res = lst[i][:maxsize]
return res

myList = ["foo", "foobar", "football", "footbag", "bar"]

print(longest_prefix(myList)) # footba

关于python - 查找 "random"字符串列表中至少 2 个元素上存在的最长前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47082106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com