3 回答
TA贡献1864条经验 获得超2个赞
列表推导式结合 Python 的any函数应该可以很好地做到这一点:
a = [phrase for phrase in a if not any([phrase2 != phrase and phrase in phrase2 for phrase2 in a])]
结果:
>>> a = ["one", "one single", "one single trick", "trick", "trick must", "trick must get", "one single trick must", "must get", "must get the job done"]
>>> a = [phrase for phrase in a if not any([phrase2 != phrase and phrase in phrase2 for phrase2 in a])]
>>> a
['trick must get', 'one single trick must', 'must get the job done']
TA贡献1995条经验 获得超2个赞
解决O(n)时间复杂度问题的一种有效方法是使用一个集合来跟踪给定短语的所有子短语,从最长的字符串迭代到最短的字符串,并且仅在以下情况下才将字符串添加到输出中它不在子短语集中:
seen = set()
output = []
for s in sorted(a, key=len, reverse=True):
words = tuple(s.split())
if words not in seen:
output.append(s)
seen.update({words[i: i + n] for i in range(len(words)) for n in range(len(words) - i + 1)})
output 变成:
['one single trick must', 'must get the job done', 'trick must get']
TA贡献1828条经验 获得超3个赞
不是一个有效的解决方案,但通过从最长到最小排序并删除最后一个元素,我们可以检查每个元素是否在任何地方都作为子字符串出现。
a = ['one', 'one single', 'one single trick', 'trick', 'trick must', 'trick must get',
'one single trick must', 'must get', 'must get the job done']
a = sorted(a, key=len, reverse=True)
b = []
for i in range(len(a)):
x = a.pop()
if x not in "\t".join(a):
b.append(x)
# ['trick must get', 'must get the job done', 'one single trick must']
添加回答
举报
