← 返回编程题库
coding-valid-anagram-character-counts简单免费版2000ms未尝试

有效的字母异位词(字符计数)

Valid Anagram (Character Counts)

开始编码

一位市场数据工程师正在对账两条来自不同交易所行情通道的原始 ticker 字符串指纹。同一标的在一条通道里可能编码为 "AAPL.O",而在另一条通道里(假设经过上游网关的某种重排)变成 "O.AAPL" 这样字符相同、顺序不同的 token——字符多重集一致,仅排列不同。在把两个字符串当成「字符多重集相同」之前,她需要一个快速的字符直方图相等判断:st 是否含有完全相同的字母,且每个字母出现次数相同?这是教科书的字母异位词判断,凡是需要确认两种编码字符负载是否一致的系统都会用到。

请实现 solution(s: str, t: str) -> bool,当 ts 的字母异位词(即 ts 字符的一个排列)时返回 True。规则:(1)区分大小写——"abc""ABC" *不是*异位词;(2)两个空串视为合法的异位词对,返回 True;(3)长度不同时直接返回 False

示例solution("anagram", "nagaram") 返回 True——两串都含 3×a, 1×n, 1×g, 1×r, 1×m,只是顺序不同。solution("rat", "car") 返回 False——长度相同,但 't''c' 不匹配,多重集不等。solution("", "") 返回 True——两者字符多重集都为空。

干净的解法是哈希表字符计数:遍历 s 时给每个字符的计数 +1,再遍历 t 时给每个字符的计数 -1。最终若所有计数都为 0(或等价地,过程中从未出现负计数且两串长度相等),即为异位词。时间 O(n),空间 O(k),其中 k 是字母表大小。对两串排序后再比较 sorted(s) == sorted(t) 也行,一行就能写完,但 O(n log n) 渐进上严格更慢——可以作为偷懒兜底,但不是工业级答案。

约束条件

  • 0 ≤ len(s), len(t) ≤ 10000
  • 两个字符串只包含 ASCII 字母数字字符(**区分大小写**:'A' 和 'a' 是不同字符)
  • 两个空串视为合法的异位词对,返回 True
  • 若 len(s) != len(t),答案恒为 False

样例

Case 1 · classic anagram

输入: ["anagram","nagaram"]

期望: true

两个字符串都包含 3 个 a、1 个 n、1 个 g、1 个 r、1 个 m,字符多重集完全相同,是 anagram。

Case 2 · classic non-anagram same length

输入: ["rat","car"]

期望: false

长度相同但字符不同:'rat' 含 r、a、t;'car' 含 c、a、r。t 与 c 不匹配,所以不是 anagram。

Case 3 · both empty

输入: ["",""]

期望: true

两个空串字符多重集都是空集,规则上判定为 anagram。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · classic anagram

输入: ["anagram","nagaram"]

期望: true

两个字符串都包含 3 个 a、1 个 n、1 个 g、1 个 r、1 个 m,字符多重集完全相同,是 anagram。

Case 2 · classic non-anagram same length

输入: ["rat","car"]

期望: false

长度相同但字符不同:'rat' 含 r、a、t;'car' 含 c、a、r。t 与 c 不匹配,所以不是 anagram。

Case 3 · both empty

输入: ["",""]

期望: true

两个空串字符多重集都是空集,规则上判定为 anagram。