有两种解法,一种是将两个单词按照字母进行排序,在比较排序后的字符串是否相等。第二种解法是建立一个26字母的数组,统计两个字符串的各个字母的出现次数,若相同则一样。
(1)C语言实现
bool isAnagram(char* s, char* t) {
int count[26]={0};
//char c;
for(int i=0;i<strlen(s);i++){
count[s[i]-'a']++;
}
for(int i=0;i<strlen(t);i++){
count[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(count[i]!=0)
return false;
}
return true;
}
//解法二:
/*
bool isAnagram(char* s, char* t) {
int count[26]={0};
char c;
while((c=*s++)!='\0'){
count[c-'a']++;
}
while((c=*t++)!='\0'){
count[c-'a']--;
}
for(int i=0;i<26;i++){
if(count[i]!=0)
return false;
}
return true;
}
*/
(2)C++实现
class Solution {
public:
bool isAnagram(string s, string t) {
vector<int> count(26,0);
for(int i=0;i<s.size();i++){
// count[s[i]-'a'] = count[s[i]-'a']+1;
count[s[i]-'a']++;
}
for(int i=0;i<t.length();i++){
//count[t[i]-'a'] = count[t[i]-'a']-1;
count[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(count[i]!=0)
return false;
}
return true;
}
};
//解法二
/*
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s==t;
}
};
*/
(3)java实现
public class Solution {
public boolean isAnagram(String s, String t) {
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
return String.valueOf(a).equals(String.valueOf(b));
}
}