描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram/
求解
class Solution {
public:
// 方法一,使用数组作为查询记录
// 速度非常快 4ms
bool isAnagram_1e(string s, string t) {
if (s.size() != t.size()) {
return false;
}
int record[26]{0}; // 小写26个字符计数
for (char c : s) {
++record[c - 'a'];
}
for (auto c : t) {
if (record[c - 'a'] <= 0) {
return false;
}
--record[c - 'a'];
}
return true;
}
// 方法二,使用散列表作为查询记录
// 散列查找表速度稍慢 12ms
bool isAnagram(string s, string t) {
if (s.size() != t.size()) {
return false;
}
std::unordered_map<char, int> record; // <char, char计数>
for (auto c: s) {
++record[c];
}
for (auto c: t) {
if (record[c] <= 0) {
return false;
}
--record[c];
}
return true;
}
};