关联容器:
map(映射)存储键值对、set(集合)存储唯一的元素:
-
map
和set(
multimap 和 multiset)
:-
底层实现是红黑树。
-
红黑树是
map
和set
的底层数据结构。
-
-
unordered_map
和unordered_set
:-
底层实现是哈希表。
-
哈希表是
unordered_map
和unordered_set
的底层数据结构。
-
s 和 t 中每个字符出现的次数都相同,则 s 和 t 互为字母异位词。碰到这种类似什么字符出现次数啥的,如果没有思路了,都可以往哈希的思路上便一下。
找出哈希函数,就是把每一个 key 对应到 0 ~ N-1 的范围内,并且放在合适的位置。
哈希函数找好,下面的就很简单:
-
遍历字符串 s,哈希表对应的字符值加。
-
遍历字符串 t,哈希表对应的字符值减。
-
如果哈希表中的值都为 0,则 s 和 t 互为字母异位词。
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size() != t.size()){
return false;
}
vector<int> count(26, 0);
for(char c: s){
count[c - 'a']++;
}
for(char c: t){
count[c - 'a']--;
}
for(int i = 0; i < count.size(); i++){
if(count[i] != 0) return false;
}
return true;
}
};