leetcode哈希表(一)-有效的字母异位词

题目

. - 力扣(LeetCode)

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

思路

python中自带字典数据结构,直接使用字典对字符串中出现的字母进行统计,若是两个字典相等,即满足字母异位词条件,返回True,若不相等,返回False

代码

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        s_dict = self.get_dict(s)
        t_dict = self.get_dict(t)
        if s_dict == t_dict:
            return True
        else:
            return False

    def get_dict(self,s):
        s_dict = {}
        for i in s:
            if i in s_dict:
                s_dict[i]+=1
            else:
                s_dict[i] = 1
        return s_dict

思路2

可以设置个一个数组,a-z一共26个字母,题目中强调了只有小写字母,所以26个够用

因为字符a到字符z的ASCII也是26个连续的数值。

因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。

代码2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值