逐行解释版力扣:easy String 4 - 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

方法一: ord('a')

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False
        
        count = [0] * 26
        for i in range(len(s)):
            count[ord(s[i]) - ord('a')] += 1
            count[ord(t[i]) - ord('a')] -= 1
        
        for i in count:
            if i != 0:
                return False
                
        return True

这个Python函数是用来判断两个字符串是否是"变位词"的。变位词是指两个字符串包含的字母和数量都是一样的,只是顺序不同。

函数代码解释如下:

  1. class Solution: 定义一个名为 Solution 的类。在 LeetCode 中,经常用这种方式封装问题的解决方法。

  2. def isAnagram(self, s: str, t: str) -> bool: 在 Solution 类中定义了一个名为 isAnagram 的方法,接受两个字符串参数 s 和 t,返回一个布尔值。

  3. if len(s) != len(t): return False 这一行先判断两个字符串的长度是否相等,如果长度不相等,它们就不能是变位词,因此直接返回 False。

  4. count = [0] * 26 初始化一个包含 26 个 0 的列表。这里的 26 是因为英文的小写字母有 26 个。每个位置的数值代表对应字母的出现次数。

  5. 然后在 for 循环中,针对字符串 s 和 t 的每个字符,分别增加和减少在 count 列表中对应的计数。这里的 ord(s[i]) - ord('a') 是为了将 'a'-'z' 这 26 个字母映射到列表的 0-25 的索引上。

  6. 在完成所有字符的计数操作后,如果 s 和 t 是变位词,那么 count 列表应该恢复到全部为 0 的状态。

  7. 最后一个 for 循环是为了检查 count 列表是否全部为 0,如果有非 0 的元素,说明 s 和 t 不是变位词,返回 False。如果所有元素都是 0,说明 s 和 t 是变位词,返回 True。

ord() 是 Python 中的一个内建函数,用来返回一个字符(长度为1的字符串)在 Unicode 编码表中的位置(也就是它的编码数字)。这个函数的完整名字是 ordinal,意思是顺序的,基数的

例如,ord('a') 将返回 97,因为在 Unicode 编码表中,小写字母 'a' 的位置就是 97。同样,ord('b') 将返回 98,以此类推。

在上述代码中,ord(s[i]) - ord('a') 用来计算字符串中某个字符对应的小写字母的顺序位置。比如,如果 s[i] 是 'a',那么计算结果就是 97 - 97 = 0;如果 s[i] 是 'b',那么计算结果就是 98 - 97 = 1。这样可以方便地用来在 count 列表中对应位置增减计数

简单来说,这段代码就是将小写字母 'a'-'z' 映射到了列表的索引 0-25。

方法3-直接初始化计数器

# 方法3-直接初始化计数器
 
class Solution:
 
    def isAnagram(self, s: str, t: str) -> bool:
 
        if len(s) != len(t):
 
            return False
 
        return Counter(s) == Counter(t)

pythonCopy code

def isAnagram(self, s: str, t: str) -> bool:

在 Solution 类中定义了一个名为 isAnagram 的方法,接受两个字符串参数 s 和 t,返回一个布尔值。这个方法将判断输入的两个字符串是否为变位词。

 
 

pythonCopy code

if len(s) != len(t):

这一行是检查输入的两个字符串 s 和 t 的长度是否相等。如果长度不相等,那么它们就不能是变位词,因为变位词的定义就是两个字符串包含的字母和数量都是一样的,只是顺序不同。

 
 

pythonCopy code

return False

如果字符串 s 和 t 的长度不相等,这一行代码就会运行,函数立即返回 False,表明这两个字符串不是变位词。

 
 

pythonCopy code

return Counter(s) == Counter(t)

这一行代码使用 Python 的 collections.Counter 类。Counter 会计算每个字符在字符串中出现的次数,返回一个字典,其中键是字符,值是该字符的计数。这行代码比较 s 和 t 对应的 Counter 对象是否相等。如果两个字符串是变位词,那么它们的 Counter 对象必然是相等的,因为它们包含的字符和各个字符的数量都是相同的。如果 Counter(s)Counter(t) 相等,函数返回 True,否则返回 False。

这个方法相比于你之前看到的方法更加简洁,因为它直接利用了 Python 的 Counter 类来完成字符的计数和比较工作。

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/131319940