class Solution {
public:
bool isAnagram(string s, string t) {
vector<int>p(26,0);
for(int i=0;i<s.length();i++)
{
p[s[i]-97]++;
}
for(int i=0;i<t.length();i++)
{
p[t[i]-97]--;
}
for(int i=0;i<26;i++)
{
if(p[i]!=0)
return false;
}
return true;
}
};
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int>p1(1001,0);
vector<int>p2;
int index=0;
for(int i=0;i<nums1.size();i++)
{
p1[nums1[i]]++;
}
for(int i=0;i<nums2.size();i++)
{
if(p1[nums2[i]]!=0)
{
p2.push_back(nums2[i]);
p1[nums2[i]]=0;
}
}
return p2;
}
};
class Solution {
public:
bool isHappy(int n) {
unordered_set<int>p;
while (1) {
int sum=0;
while (n != 0) {
sum=sum+(n%10)*(n%10);
n = n / 10;
}
if(sum==1)
return true;
if(p.find(sum)!=p.end())//没有走到结尾,证明在集合中存在sum,证明已经开始循环,不会等于1;
return false;
else
{
p.insert(sum);
}
n=sum;
}
}
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>map;
vector<int>p;
for(int i=0;i<nums.size();i++)
{ unordered_map<int,int>::iterator it=map.find(target-nums[i]);
if(it!=map.end())
{
p.push_back(it->second);
p.push_back(i);
}
else
{
map[nums[i]]=i;
}
}
return p;
}
};
两数之和,用到map键值对映射。假设target为9,当前数组值为3,那么应当找之前有无出现过6,当出现某一个数是否在之前出现过就要用到哈希。能提高效率。