我正在寻找一些函数,我可以比较两个字符串,除了元素的顺序无关紧要。 E.g:
'abc' == 'bca'
True
python是否有这样的内置函数?
答案 0 :(得分:4)
python中的字符串是可返回字符串中字符的迭代。像任何迭代一样,它们可以用sorted
包装。如果你比较那些包装器,你基本上要比较两个字符串中是否有相同的字符,无论它们的原始顺序如何:
>>> s = 'abc'
>>> t = 'bca'
>>> s == t
False
>>> sorted(s) == sorted(t)
True
答案 1 :(得分:2)
6对于较小的字符串,您可以在两个字符串上调用排序:
def is_equal(a, b):
return len(a) == len(b) and sorted(a) == sorted(b)
如果sorted(a) == sorted(b)
为True,则两个字符串的长度必须相同且字符相同:
如果字符串长度相同,则使用Counter
dict来计算频率:
from collections import Counter
def is_equal(a, b):
return len(a) == len(b) and Counter(a) == Counter(b)
如果字符串长度不同,则它们不能相等,如果它们都是a中的字符必须在b中并且频率必须相同。解决方案是O(n)
,而O(n log n)
调用已排序的