【发布时间】:2019-07-26 09:53:07
【问题描述】:
我有一个很长的字符串。在这个字符串中,我创建了一大组子字符串,其中每个元素都可能是该集合中某个其他子字符串的子字符串。我正在尝试从我的原始集合中创建一组最短的子字符串。到目前为止,这是我对解决方案的尝试。
string = 'ABAAABAAB'
setA = {'ABAAAB', 'BAAAB', 'AAAB', 'AAB'}
setB = setA.copy()
setC = setA.copy()
for s1 in setA:
len1 = len(s1)
for s2 in setB:
len2 = len(s2)
if s1 in s2 and len2 > len1:
setC.discard(s2)
我正在创建我的原始集合的副本,并遍历 setA 和 setB 的元素。如果其中一个元素是另一个元素的子字符串,我会丢弃较长的元素。由于使用嵌套循环,setA 的元素增加,我的解决方案的运行时间大大增加。有没有时间复杂度更低的解决方案?
【问题讨论】:
-
你能在这个例子的最后展示一下你想在
setC中成为什么吗?我最初对如何提高效率的想法是使用存储在列表中的setA的排序版本(可能是字符串的长度?),而不是将其保持为一个集合(未排序)。 -
当然,
setC将是{'AAB'}。但是我不确定创建一个列表是否可行,因为我首先从另外两个集合的联合中创建了setA。 -
从@blhsing 发布的anwer 中,您可以使用
sorted()函数对集合进行排序并将其转换为列表。
标签: python python-3.x string for-loop set