python - 什么是最快的算法:在字符串列表中,删除作为另一个字符串的子字符串的所有字符串 [Python(或其他语言)]
问题描述
有一个字符串列表,例如 ["abc", "ab", "ad", "cde", "cde", "de", "def"] 我希望输出是 ["abc", "广告”、“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
解决方案
strings = ["abc", "ab", "ad", "cde", "cde", "de", "def"]
unique_strings = []
for s in strings:
if all(s not in uniq for uniq in unique_strings):
unique_strings.append(s)
运行此代码后,unique_strings
等于['abc', 'cde', 'def', 'ad']
.
注意:这可能不是最快的方法,但它是一个简单的解决方案。
推荐阅读
- java - 关于异或,“arr[i] ^= 1”和“arr[i] ^1”有什么区别?
- paraview - Paraview中的攻角
- reactjs - 过滤数据不
在 ReactJS Firebase 之前 - python - 根据熊猫数据框中的条件获取最大值和最小值
- javascript - 块供应商文件在生产中太大
- sql - 递归 SQL 查询以获取零件的所有组件
- google-analytics - 使用 Google Analytics 为 Google 表格添加的目标完成数未显示正确的数字
- python-3.x - 组合框位于网格的中间
- c++ - 具有可变长度定义向量的初始化器列表
- android - Recyclerview 项目在剪贴板中的多个文本复制