LeetCode 242. 有効なアルファベット異位語(C++)

3824 ワード

タイトル:
2つの文字列sとtを与え、tがsのアルファベット異位語であるか否かを判断する関数を記述する.
例1:
  : s = "anagram", t = "nagaram"
  : true

例2:
  : s = "rat", t = "car"
  : false

説明:文字列に小文字のみが含まれていると仮定できます.
ステップ:入力文字列にunicode文字が含まれている場合はどうしますか?あなたの解法を調整してこのような状況に対応することができますか?
考え方:
小文字のみを含むため、SとTのすべての小文字をカウントしてint[26]の配列に置けばよいコード1
class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.empty() || t.empty())
            return true;
        if(s.size() !=t.size())
            return false;
        int sArr[26] = {0};
        int tArr[26] = {0};
        for(int i = 0; i < t.size(); i++){
            ++sArr[(int)s[i] - (int)'a'];
            ++tArr[(int)t[i] - (int)'a'];
        }
        for(int i = 0; i < 26; i++){
            if(sArr[i] != tArr[i])
                return false;
        }
        return true;
    }
};

入力文字列にunicode文字が含まれていることを考慮するとmapコード2を使用できます.
class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size() != t.size())
            return false;
        map<char,int> sMat;
        for(int i = 0; i < s.size(); i++){
            sMat[s[i]]++;
        }
        for(int i = 0; i < t.size(); i++){
            sMat[t[i]]--;            
        }
        for(int i = 0; i < t.size(); i++){
            if(sMat[t[i]] != 0)
                return false;
        }
        return true;
    }
};