给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
C++
class Solution {
public:
bool isAnagram(string s, string t) {
if((s.empty()&&t.empty())){ // ""和""
return true;
}else if(s.size()!=t.size()){ // "a"和"ab"
return false;
}else if(s.compare(t) != 0 && sameChars(s,t)){ // "abc"和"acb"
return true;
}else if(s.compare(t) == 0 && s.size() ==1){ // "a"和"a"
return true;
}
return false;
}
// 比较两个字符串中所的字符是否具有相同的数量,是则返回true
bool sameChars(string s, string t){
map<char, long> m1,m2;
for(int i=0;i<s.size();i++){
if(m1.find(s[i])!=m1.end()){
m1[s[i]]+=1;
}else{
m1.insert(pair<char, long>(s[i], 1));
}
}
for(int i=0;i<t.size();i++){
if(m2.find(t[i])!=m2.end()){
m2[t[i]]+=1;
}else{
m2.insert(pair<char, long>(t[i], 1));
}
}
map<char, long>::iterator it=m2.begin();
for (map<char, long>::iterator iss=m1.begin(); iss!=m1.end(); ++iss){
if(it->first!=iss->first || it->second!=iss->second){
return false;
}
++it;
}
return true;
}
};









网友评论