我需要找到给定字符串的所有子字符串的变音图。我使用以下代码找到给定字符串的所有可能的子字符串:
def anagrams(string):
# abba
subs = [string[i:j+1] for i in range(len(string)) for j in range(i, len(string))]
# ['a', 'ab', 'abb', 'abba', 'b', 'bb', 'bba', 'b', 'ba', 'a']
我想从这个列表中找到等长的子串,如果它们是字谜。有什么想法吗?在
Tags:
如果两个字符串是字谜,它们的长度必须相同,您可以直接用一个简单的嵌套
for
循环来测试它们。在为了检查两个字符串是否是字谜,^{} 很有用:它统计iterable中每个不同元素的出现次数,因此两个字符串}是字谜当且仅当
si
和{Counter(si) == Counter(sj)
。在与@MarcoBonelli answer一样,您可以使用collections.Counter来创建一个字符串的表示形式,当且仅当这些字符串是彼此的换位符时,该字符串才会相等,例如:
不必执行嵌套的for循环并检查每对,您可以使用字典对具有相同计数器表示的字符串进行分组,并使用单个循环:
^{pr2}$输出
在输出中,子列表对应于字符串组,这些字符串是彼此的anagram。要使用字典中的计数器,您必须将项目转换为frozenset。最后,这种方法的复杂度是O(n),其中n是子串的数目。在
相关问题 更多 >
编程相关推荐