class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0}; //可以用一个0代表全体都为0
for(int i = 0 ; i < s.size() ; i++){//注意看这里的s.size()是否要-1
record[s[i] - 'a']++; //本题的核心实际上就在这里了,这里可以采用数字去描述字母,这个是精髓
}
for(int j = 0 ; j < t.size() ; j++){
record[t[j] - 'a']--;
}
for(int k = 0 ; k < 26 ; k++){
if(record[k] != 0){
return false;
}
}
return true;
}
};
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set; //核心就是对unordered_set这个容器的理解,它会将一系列内容按序列排好,而且保证不会有重复内容
unordered_set<int> use1(nums1.begin(), nums1.end());
for(int num : nums2){
if(use1.find(num) != use1.end()){
result_set.insert(num);
}
}
return vector<int>(result_set.begin(),result_set.end()); //这里注意看vector是如何定义的,可以有.begin()和.end()两种
}
};
class Solution {
public:
//n % 10 是一个取模运算,它返回 n 除以 10 的余数。这个操作常用于获取一个整数的最后一位数字。
int getSum(int n){
int sum = 0;
while(n){
sum += (n % 10) * (n % 10);
n = n / 10 ; //n /= 10 是一个复合赋值操作,它等价于 n = n / 10。这个操作将 n 的值除以 10,并将结果重新赋值给 n。在编程中,这种操作通常用于去除一个整数 n 的最后一位数字。
}
return sum;
}
bool isHappy(int n){
unordered_set<int> use;
while(1){
int sum = getSum(n);
if(sum == 1){
return true;
}
if(use.find(sum) != use.end()){
return false;
}
else{
use.insert(sum);
}
n = sum; //这句话很重要
}
}
};
- 两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map<int,int> use1;
for(int i = 0; i < nums.size(); i++){
auto iter = use1.find(target - nums[i]);
if(iter != use1.end()){
return {iter->second , i};
}
use1.insert(pair<int,int>(nums[i],i)); //注意pair的用法
}
return {}; //这里还搞不懂为什么
}
};