题目
242.有效的字母异位词
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
方法一
class Solution {
public:
bool isAnagram(string s, string t) {
int len_s = s.length(), len_t = t.length();
int count[26];
bool result = true;
if (len_s != len_t) {
return false;
} else {
for (int k = 0; k <= 26; k++) {
count[0] = 0;
}
for (int i = 0; i < s.length(); i++) {
count[int(s[i]) - 97]++;
}
for (int j = 0; j < t.length(); j++) {
count[int(t[j]) - 97]--;
}
for (int n = 0; n < 26; n++) {
if (count[n] != 0) {
result = false;
break;
}
}
return result;
}
}
};
方法二
class Solution {
public:
bool isAnagram(string s, string t) {
char p = ' ', q = ' ';
int k;
bool result = false;
if (s.length() != t.length()) {
return result;
} else {
string::iterator j;
string::iterator i;
for (j = t.begin(); p == q && t.length() != 0; t.erase(0, 1)) {
p = *j;
i = s.begin();
q = *i;
while (p != q && i != s.end()) {
i++;
q = *i;
}
*i = s[k];
s.erase(k, 1);
};
if (s.length() == 0 && t.length() == 0 && p == q) {
result = true;
}
return result;
}
}
};
其实这两种方法原理上和练习二都是一样的,只是稍作改进.
还可以使用sort函数.
方法三
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;
} else {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
if (s == t) {
return true;
} else {
return false;
}
}
}
};