我想检查字符串数组中的任何字符串是否是同一数组中任何其他字符串的前缀。我正在考虑基数排序,然后单次通过数组。
任何人都有更好的主意吗?
答案 0 :(得分:1)
如果你对它们进行排序,你只需要检查每个字符串是否是下一个字符串的前缀。
答案 1 :(得分:1)
我认为,可以修改基数排序以动态检索前缀。我们所要做的就是按照第一个字母对行进行排序,在每个单元格中不存储首字母。然后,如果单元格包含空行,则该行对应于前缀。如果单元格只包含一个条目,那么当然没有可能的行 - 前缀。
在这里,这可能比我的英文更干净了:
lines = [
"qwerty",
"qwe",
"asddsa",
"zxcvb",
"zxcvbn",
"zxcvbnm"
]
line_lines = [(line, line) for line in lines]
def find_sub(line_lines):
cells = [ [] for i in range(26)]
for (ine, line) in line_lines:
if ine == "":
print line
else:
index = ord(ine[0]) - ord('a')
cells[index] += [( ine[1:], line )]
for cell in cells:
if len(cell) > 1:
find_sub( cell )
find_sub(line_lines)
答案 2 :(得分:1)
要实现接近O(N 2 )的时间复杂度:计算每个字符串的哈希值。
提出一个好的哈希函数,看起来像:
因此像“ab”这样的东西计算为“12”= 1 * 27 + 2 = 29
需要注意的一点:
要小心你计算哈希值的基数。例如,如果你取一个小于27的基数,你可以让两个字符串给出相同的哈希值,我们不希望这样。
<强>步骤:强>