想法太天真了点:
错误,容我想想,
class Solution {
public:
bool isAnagram(string s, string t) {
int len=s.length();
int len_t=t.length();
if(len!=len_t)return false;
int res=0;
for(auto i=0;i<len;i++)
{
res+=s[i]-t[i];
printf("%d\n",res);
}
return res==0 ? true:false;
}
};
统计字母出现次数,
/*
思路:
统计每个字母出现的次数,
*/
// class Solution {
// public:
// bool isAnagram(string s, string t) {
// int len=s.length();
// int len_t=t.length();
// if(len!=len_t)return false;
// int res=0;
// for(auto i=0;i<len;i++)
// {
// res+=s[i]-t[i];
// printf("%d\n",res);
// }
// return res==0 ? true:false;
// }
// };
/*
思路:
统计每个字母出现的次数,形成map,如果直接用map要怎么做呢
*/
class Solution {
public:
bool isAnagram(string s, string t) {
int len_s=s.length(),len_t=t.length();
if(len_s!=len_t)return false;
int count_s[256]={0},count_t[256]={0};
for(auto i=0;i<len_s;i++)
{//map to arry
count_s[s[i]]++;
count_t[t[i]]++;
}
for(auto i=0;i<256;i++)
{//judge if 2 arry equal
if(count_s[i]!=count_t[i])
return false;
}
return true;
}
};
看看人家大神的,挺巧妙:
追求极限,
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.length() != t.length()) return false;
int n = s.length();
int counts[26] = {0};
for (int i = 0; i < n; i++) {
counts[s[i] - 'a']++;
counts[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++)
if (counts[i]) return false;
return true;
}
};
估计要用map那些好