classSolution{public:boolisAnagram(string s, string t){int recode[26]={};// 使用空列表初始化,默认初始化为0for(auto& a : s){
recode[a -'a']+=1;}for(auto& b : t){
recode[b -'a']-=1;}for(auto& c : recode){if(c !=0)returnfalse;}returntrue;}};
349. 两个数组的交集
使用数组作为哈希表,要注意数据量要小,数据间不能太稀疏。否则会容纳不下或者造成内存的浪费。
使用std::unorder_set类型,更加普适。
classSolution{public:
vector<int>intersection(vector<int>& nums1, vector<int>& nums2){int recodeNums1[1001]={};int recodeNums2[1001]={};
vector<int> result;for(auto& a : nums1){
recodeNums1[a]=1;}for(auto& b : nums2){
recodeNums2[b]=1;}for(int i =0; i <1001;++i){if(recodeNums1[i]==1&& recodeNums2[i]==1)
result.push_back(i);}return result;}};classSolution{public:
vector<int>intersection(vector<int>& nums1, vector<int>& nums2){
unordered_set<int> result_set;// 元素是唯一的
unordered_set<int>num_set(nums1.begin(), nums1.end());for(int num : nums2){if(num_set.find(num)!= num_set.end()){
result_set.insert(num);}}returnvector<int>(result_set.begin(), result_set.end());}};
202.快乐数
涉及到判断一个数是否重复出现,要考虑使用哈希表。
classSolution{public:intgetSum(int n){int result =0;while(n){
result +=(n %10)*(n %10);
n = n /10;}return result;}boolisHappy(int n){
unordered_set<int> recode;while(1){int sum =getSum(n);
n = sum;if(n ==1){returntrue;}if(recode.find(n)!= recode.end()){returnfalse;}else{
recode.insert(n);}}}};