Permutation returning True or False python



我试图创建一个函数isPerm(P),如果它是置换,则返回True,否则返回False

到目前为止,我有:

def isPerm(P):
    if len(P) == list(range(P)):
        return True
    else:
        return False

任何帮助都会很棒。

我能想到的最简单的方法是使用Counter

from collections import Counter
def isPerm(P, Q):
    return Counter(P) == Counter(Q)
print isPerm("oolegg", "google")

输出

True

对于短列表来说,这是一个简单的解决方案。

def is_perm(a, b):
    return sorted(a) == sorted(b)
天真的方法:对列表的克隆进行排序,然后将原始列表与排序后的克隆进行比较。如果相等,则有一个置换。但排序需要时间。

高效的方法:创建一个条目设置为0的字典/计数器,并在列表中循环,增加字典中的值。如果在完成列表后得到0或大于1的值,则没有排列。

最新更新