Python查找字符串是否是彼此字符串的anagram

2024-09-30 12:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解决上述面试问题,以检查字符串是否是彼此的换位符。具体实施如下:

NO_OF_CHARS = 256
def areAnagram(str1, str2):
    count = [0] * NO_OF_CHARS
    i = 0
    while (i in str1) and (i in str2):
        count[ord(i)]+=1
        i += 1
    if len(str1) != len(str2):
        return 0
    for i in xrange(NO_OF_CHARS):
        if count[i]:
            return 0
    return 1

str1 = "geeksforgeeks"
str2 = "forgeeksgeeks"
if areAnagram(str1, str2):
    print "The two strings are anagram of each other"
else:
    print "The two strings are not anagram of each other"

运行代码时出现以下错误:

^{pr2}$

我是不是在while循环中出错了?另外,如何避免使用I=0语句?谢谢。在


Tags: ofthenoinlenreturnifcount
3条回答

如果要对字符进行计数,则需要对两个字符串进行计数并进行比较

NO_OF_CHARS = 256
def areAnagram(str1, str2):
    if len(str1) != len(str2):
        return 0
    count = [0] * NO_OF_CHARS
    for c1,c2 in zip(str1,str2):
        count[ord(c1)] +=1
        count[ord(c2)] -=1
    return all(not c for c in count)

为了提高效率和清晰度,我将检查字符串长度移到方法的开头

编辑:根据Blckknght的评论更新了我的答案

在Python中执行此操作的规范方法是使用collections.Counter

from collections import Counter

def areAnagram(str1, str2):
    return Counter(str1) == Counter(str2)

这应该占用O(N)空间和时间(其中N是{})。但是请注意,尽管这段代码的渐近性能更好,但是对于短字符串来说,它可能仍然比使用sorted的版本慢。Python的sort代码非常快!在

如果您可能要使用该函数来比较非常不同的字符串,则可以在计数前使用特殊情况检查字符串长度:

^{pr2}$

查看字符串是否由相同字符组成的简单方法是将它们作为排序列表进行比较:

def is_anagram(src, trgt):
    """
    Determine if trgt is an anagram of src
    :param src: (str)
    :param trgt: (str)
    :returns: (bool) True if trgt is an anagram of src; else False
    """
    return sorted(src) == sorted(trgt)

相关问题 更多 >

    热门问题