algorithm - 在 Python 中检查两个字符串是否是彼此的排列

标签 algorithm python

我正在检查两个字符串 ab 是否是彼此的排列,我想知道在 Python 中执行此操作的理想方法是什么。来自 Python 之禅,“应该有一种——最好只有一种——显而易见的方法”,但我认为至少有两种方法:

sorted(a) == sorted(b)

all(a.count(char) == b.count(char) for char in a)

但是当(例如)a 的第一个字符在 b 中不存在时,第一个比较慢,而当它们实际上是排列时,第二个比较慢。

有没有更好的方法(在更 Pythonic 的意义上,或者在平均更快的意义上)?或者我应该根据我预计最常见的情况从这两个中进行选择?

最佳答案

这是一种 O(n) 的方法,渐近优于您建议的两种方法。

import collections

def same_permutation(a, b):
    d = collections.defaultdict(int)
    for x in a:
        d[x] += 1
    for x in b:
        d[x] -= 1
    return not any(d.itervalues())

## same_permutation([1,2,3],[2,3,1])
#. True

## same_permutation([1,2,3],[2,3,1,1])
#. False

关于algorithm - 在 Python 中检查两个字符串是否是彼此的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396421/

相关文章:

algorithm - 的渐近运行时间是多少

python - 来自 Python 的 awk : wrong subprocess arguments?

python - 即使正确安装,导入包也会出错

python - django查看方法签名是否可以匹配GET参数?

python - Swift/Python 引用计数差异

javascript - 比较两个嵌套数组和对象以查找差异

c++ - 如何计算 [1,x] 范围内 n 的互质数,其中 x 可以与 n 不同?

algorithm - 计算给定数字序列的可能解码

algorithm - 是否有一种有效的算法来找到 "maximal connected set"?

python - 将 request.content 转换为 Panda Dataframe python