242. 有效的字母异位词
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size() < t.size()){ // 让字符更多的字符串作为检索对象,另一个就作为判断对象
swap(s,t);
}

// 加入 unordered_map
unordered_map<char, int> find_umap;
for (auto ch : s) {
find_umap[ch]++;
}
// 检验 是否为 有效的字母异位词
for (auto ch : t) {
auto it = find_umap.find(ch);
if (it != find_umap.end()) {
find_umap[ch]--;
}
}
// 是否所有 key 的 value 都为 0 了
for (auto data : find_umap) {
if (data.second != 0) {
return false;
}
}
return true;
}
};

字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。

A 的 字母异位词是 B,那么 A 有的单词 B 一个不能多一个不能少,那只需要把 A 中加入哈希表中,再遍历检查 B 中的单词是否都能被找到即可。

但我们绝不能选择 set 集合,因为它有去重功能。可以选择 map 映射,key 是 单个字母,value 是 单个字母的个数。如果遍历完成之后,所有单个字母的 value 都为 0,那么两个字符串就是字母异位词。

为了让检索不出现遗漏,我们得让字符更多的字符串作为检索对象(加入到 map 映射中),另一个就作为判断对象。