有效的字母异位词(字符计数)
Valid Anagram (Character Counts)
开始编码一位市场数据工程师正在对账两条来自不同交易所行情通道的原始 ticker 字符串指纹。同一标的在一条通道里可能编码为 "AAPL.O",而在另一条通道里(假设经过上游网关的某种重排)变成 "O.AAPL" 这样字符相同、顺序不同的 token——字符多重集一致,仅排列不同。在把两个字符串当成「字符多重集相同」之前,她需要一个快速的字符直方图相等判断:s 和 t 是否含有完全相同的字母,且每个字母出现次数相同?这是教科书的字母异位词判断,凡是需要确认两种编码字符负载是否一致的系统都会用到。
请实现 solution(s: str, t: str) -> bool,当 t 是 s 的字母异位词(即 t 是 s 字符的一个排列)时返回 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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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。