Leetcode242有效的字母异位词

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的
字母异位词。
s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思路与算法

问题分析

  1. 字母异位词:两个字符串中包含的字符及其出现次数完全相同,但顺序可能不同。
  2. 特殊情况:如果两个字符串长度不同,则必然不可能互为异位词。

解决方法

  1. 频率统计:利用 Python 内置模块 collections.Counter 对每个字符串的字符进行计数。直接比较两个计数字典是否完全一致即可。
  2. 如果字符串中包含 Unicode 字符,由于 Counter 可以处理任意可哈希的对象,上述方法仍然适用,无需做额外调整。(字典的键可以是任何字符——包括 Unicode 字符。)

代码

from collections import Counter

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        # 如果两个字符串长度不同,直接返回false
        if len(s) != len(t):
            return False
        
        # 统计两个字符串中各个字符的字频
        counter_s = Counter(s)
        counter_t = Counter(t)

        return counter_s == counter_t

总结

  1. Python 内置模块 collections.Counter
    • 定义:Counter 是 collections 模块中的一个子类,继承自 dict。它用于对可迭代对象中的元素进行计数,返回一个字典形式的对象,其中键为元素,值为该元素出现的次数。
    • 初始化:
      • 可以通过传入一个可迭代对象(例如字符串、列表等)来创建。
      • 也可以传入一个映射对象(比如字典)来初始化。
from collections import Counter

# 通过字符串初始化
counter1 = Counter("abracadabra")
print(counter1)
# 输出类似: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

# 通过列表初始化
counter2 = Counter([1, 2, 2, 3, 3, 3])
print(counter2)
# 输出: Counter({3: 3, 2: 2, 1: 1})

# 通过字典初始化
counter3 = Counter({'x': 2, 'y': 3})
print(counter3)
# 输出: Counter({'y': 3, 'x': 2})
  1. collections.Counter 是处理计数问题的强大工具,掌握它可以大大简化统计数据、判断频率、比较集合等问题的代码。
  2. 任何可哈希的对象都可以作为 Counter 的元素,例如元组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值