力扣题:242.有效的字母异位词

题目:

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

示例 1: 输入: s = "anagram", t = "nagaram" 输出: true

示例 2: 输入: s = "rat", t = "car" 输出: false

说明: 你可以假设字符串只包含小写字母。

Python3代码解答:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        # 创建计数器,创建了一个长度为26的列表record,这个列表用于记录每个字母在字符串s中出现的次数
        # 然后再根据字符串t中的字母来减少计数
        record = [0] *26
        # 遍历字符串s中的每一个字符i,计算字符串中每个字母的出现次数
        for i in s:
            record[ord(i) - ord("a")] += 1
        # 遍历字符串t中的每个字符
        for i in t:
            record[ord(i) - ord("a")] -= 1
        # 检查计数器,如果所有计数都是0,说明s和t中每个字母出现的次数完全一致,它们互为字母异位词
        for i in range(26):
            if record[i] != 0:
                return False
        return True

上述代码解答:

上述代码是用来检查两个字符串st是否互为字母异位词的。所谓“字母异位词”,指的是两个字符串的字母相同,但是字母的排列顺序不同,比如说,"anagram" 和 "nagaram" 就是一对字母异位词。代码的详细实现过程如下:

  1. 创建计数器:首先,创建了一个长度为26的列表record,这个列表用于记录每个字母在字符串s中出现的次数,然后再根据字符串t中的字母来减少计数。这里之所以用长度为26的列表,是因为英文字母一共有26个,每个元素初始值设为0

  2. 处理第一个字符串:遍历字符串s中的每一个字符i,使用ord(i) - ord("a")来计算每个字符相对于'a'的位置(ASCII码),然后在record列表对应位置上的计数加1。这样,record列表中的每个元素就表示了字符串s中对应字母出现的次数。

  3. 处理第二个字符串:接着,遍历字符串t中的每个字符,并执行类似的操作,但这次是将record列表对应位置上的计数减1,如果t中的某个字符在s中也存在,则它们的计数操作将互相抵消。

  4. 检查计数器:最后,遍历record列表,检查是否所有的计数都回到了0。如果所有计数都是0,说明st中每个字母出现的次数完全一致,则它们互为字母异位词,函数返回True。如果有任何计数不为0,说明两个字符串在字母数量上不匹配,它们不是字母异位词,函数返回False

这里面比较难于理解的就是:record[ord(i) - ord("a")] += 1这句代码实现的功能,其具体的解释如下:

    record[ord(i) - ord("a")] += 1 代码的主要作用是计算字符串中每个字母的出现次数,并且把这个次数记录下来。

       用一个具体的例子来说明这个过程是如何工作的,假设我们正在处理字符串 "apple" 中的每个字母,并且当前字母是 'p'

  1. 理解ord()函数:首先,ord()是一个Python内置函数,接受一个字符串(即一个字符)作为参数,并返回该字符的ASCII码(或Unicode码点)。例如,ord('a')返回97,ord('b')返回98,以此类推。

  2. 计算相对位置:当对当前字符i(假设为'p')执行ord(i)时,得到'p'的ASCII码,即112。然后,从这个值中减去'a'的ASCII码(97),得到ord('p') - ord('a') = 112 - 97 = 15这个结果15,实际上是'p'在字母表中的索引位置(从0开始计数)

  3. 更新计数器:接下来,使用这个索引(15)来访问record列表中的相应位置,并将其值增加1。record[15] += 1。这意味着正在记录'p'字母在字符串中出现的次数,对于字符串 "apple",当我们遍历到第一个'p'时,record[15]从0变为1,遍历到第二个'p'时,再次执行record[15] += 1record[15]就变成了2准确地记录了'p'字母出现了两次。

      本文的对于力扣242. 有效的字母位词的Python3解答,仅仅是个人学习资料记录,也十分高兴我的见解可以帮助其他的正在做这个题目的同学,基础较差,仅仅是个人见解,大神勿喷,欢迎交流,谢谢!

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又在熬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值