leecode[242]有效的字母异位词 Python3实现(collections.Counter,哈希计数)

本文介绍了一种通过比较两个字符串是否为字母异位词的方法,包括使用哈希表记录字母出现次数、直接排序对比及利用Counter进行计数对比等多种解法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 
# 
#  示例 1: 
# 
#  输入: s = "anagram", t = "nagaram"
# 输出: true
#  
# 
#  示例 2: 
# 
#  输入: s = "rat", t = "car"
# 输出: false 
# 
#  说明: 
# 你可以假设字符串只包含小写字母。 
# 
#  进阶: 
# 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? 
#  Related Topics 排序 哈希表 
#  👍 306 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s)!=len(t):
            return False
        dict = {}
        for ch in s:
            if dict.get(ch):
                dict[ch] += 1
            else:
                dict[ch] = 1
        for ch in t:
            if dict.get(ch):
                if dict[ch]==0:
                    return False
                dict[ch] -= 1
            else:
                return False
        return True
# leetcode submit region end(Prohibit modification and deletion)

首先判断二者长度是否相同,如果不同直接False;
用哈希表记录s的字母出现个数,验证t中字母是否出现相同个数。

其它解法

排序后相同则为异位词:

return sorted(s) == sorted(t)

Counter()结果相同则为异位词:

return collections.Counter(s) == collections.Counter(t) 

collections.Counter做了哈希计数工作,实例代码:

import collections
a = "abc"
print(collections.Counter(a))

# Counter({'a': 1, 'b': 1, 'c': 1})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值