【发布时间】:2020-04-16 22:44:11
【问题描述】:
有一个字符串列表,例如["abc", "ab", "ad", "cde", "cde", "de", "def"] 我希望输出为 ["abc", "ad", "cde", "def"]
"ab" 被删除,因为它是 "abc" 的子字符串 "cde" 被删除,因为它是另一个 "cde" 的子字符串 “de”被删除,因为它是“def”的子字符串
最快的算法是什么?
我有一个蛮力方法,就是O(n^2),如下:
def keep_long_str(str_list):
str_list.sort(key = lambda x: -len(x))
cleaned_str_list = []
for element in str_list:
element = element.lower()
keep_element = 1
for cleaned_element in cleaned_str_list:
if element in cleaned_element:
keep_element = 0
break
else:
keep_element = 1
if keep_element:
cleaned_str_list.append(element)
return cleaned_str_list
【问题讨论】:
-
* 删除,错字见谅,不知道大家修改问题
-
点击问题下方的edit 链接。标题位于顶部的单独文本框中。
-
请重复intro tour。如果你表现出你的努力,你会得到更好的回应:发布你的代码,描述复杂性(例如 O(n^2)),并且也许建议 - 一般来说 - 它可能是怎样的改进。
-
“最快的方法是什么”通常翻译为“我不知道该怎么做;给我一些代码?”
-
如果输入列表是
["cde", "de"],是否会删除"de"?