242. 有效的字母异位词 - 力扣(LeetCode)
思路:首先判断两个字符串长度是否相等,如果不相等return false,如果相等,设置一个数组,a~z用0~25表示,字符串s中出现就++,t中出现就--,当有元素为负数时说明s中没有这个字符,返回false。
bool isAnagram(char* s, char* t) {
if(strlen(s)!=strlen(t)) return false;
int hash[26]={};
for(int i=0;i<strlen(s);i++)
{
hash[s[i]-'a']++;
}
for(int i=0;i<strlen(t);i++)
{
hash[t[i]-'a']--;
if(hash[t[i]-'a']<0)return false;
}
return true;
}
思路:输出两个数组交集且去重,用哈希。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>result;
unordered_set<int>nums(nums1.begin(),nums1.end());
for(int n:nums2)
{
if(nums.find(n)!=nums.end())
result.insert(n);
}
return vector<int>(result.begin(),result.end());
}
};
用unordered_set取找现在的和是不是出现过,出现过说明死循环了。
class Solution {
public:
int suan(int n)
{
int t=0;
while(n)
{
t+=(n%10)*(n%10);
n=n/10;
}
return t;
}
bool isHappy(int n) {
unordered_set<int>num;
while(1){
int nums=suan(n);
if(nums==1) return true;
if(num.find(nums)==num.end())
num.insert(nums);
else return false;
n=nums;
}
}
};
思路:用unordered_map,来存下标,然后遍历数组,看target-nums[i]是否能在map里找到,如果能找到还要判断是不是它自己,如果不是则输出,是的话继续找,例如:6 找到的是 3,3重复位置。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>mp;
for(int i=0;i<nums.size();i++)
{
mp[nums[i]]=i;
}
for(int i=0;i<nums.size();i++){
auto ite=mp.find(target-nums[i]);
if(ite!=mp.end() && ite->second!=i) return {ite->second,i};
}
return {};
}
};