擅长:python、mysql、java
<p>让我们首先对给定的<code>lst</code>w.r.t长度进行排序,因为已知的事实是子字符串的长度总是小于或等于原始字符串,因此在排序之后,我们在列表的开头有较小长度的字符串,然后在排序后的列表中迭代,比较当前元素与旁边的所有元素它,这个小的优化可以降低问题的复杂性,因为现在我们不必将每个元素与其他元素进行比较。在</p>
<pre><code>lst1 = ['abc', 'abcd', 'xyx', 'mno']
lst2 = ['abc', 'xyzabc', 'mno']
lst3 = ["abc", "abc"]
def check_list(lst):
lst = list(set(lst)) #if you want to avoid redundant strings.
lst.sort(key = lambda x:len(x))
n = len(lst)
for i in xrange(n):
for j in xrange(i+1, n):
if lst[j].startswith(lst[i]):
return True
return False
print check_list(lst1)
print check_list(lst2)
print check_list(lst3)
>>> True
>>> False
>>> False #incase you use lst = list(set(lst))
</code></pre>