LeeCode题目笔记

2019-09-11 有效的字母异位词

2019-09-28  本文已影响0人  Antrn

给定两个字符串 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;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读