用于检查字谜数量的Python优化循环

时间:2018-07-07 18:49:13

标签: python optimization

我正在尝试解决一个问题,该问题提供字符串作为输入并提供可能的字谜数量作为输出。这可以使用字典解决,但我只能考虑for循环和字符串索引。

count = 0
    for i in range(1,len(s)):
        for j in range(0,len(s)):
            for k in range(j+1,len(s)):
                if(k+i>len(s)):
                    continue
                # print(list(s[j:j+i]),list(s[k:k+i]),j,j+i,k,k+i)
                if(sorted(list(s[j:j+i]))==sorted(list(s[k:k+i]))):
                    count +=1         
    return count

我到目前为止已经编码,并尝试使用k + i进行优化。有人可以告诉我其他技术来优化代码而不丢失逻辑。代码会因较大的字符串超时而不断被终止。我应该将sorted函数替换为其他函数。

1 个答案:

答案 0 :(得分:2)

如果每个字母都是唯一的,则字谜的数量为n!,其中n为字符串的长度(例如,法律中有3!=6)。如果给定字母重复两次(例如,wall),那么答案将是您应有的两倍(因为w-(second l)-(first l)-a之类的东西与w-(first l)-(second l)-a之类的东西实际上是无法区分的)。事实证明,如果一个字母重复k次({{1}中的字母k的{​​{1}}是2),则"l"的计数将增加{ {1}}。对于每个重复的字母都是如此。

因此,要获得字谜的数量,您可以执行以下操作:

wall

实施n!k!留给读者作为练习:-)。注意:请注意,重复出现的字母可能会出现多次,而并不总是彼此相邻。例如:“ aardvark”应该为“ a”返回3的计数,为“ r”返回2的计数,其他所有计数都返回1。