LeetCode(242)Valid Anagram


タイトル
Given two strings s and t, write a function to determine if t is an anagram of s.
For example, s = “anagram”, t = “nagaram”, return true. s = “rat”, t = “car”, return false.
Note: You may assume the string contains only lowercase alphabets.
ぶんせき
指定された2つの文字列が同じアルファベットで異なる配列の単語であるかどうかを判断します.
最も簡単な方法はstlのソート関数sortを呼び出して2つの文字列sとtにソートし、それから等しいかどうかを比較すればよく、複雑度はO(nlogn)である.
複雑さを嫌っている場合は、別の方法で各文字の個数を等しく判定することもできます(テーマは小文字だけだと仮定すると26個しかありません)、比較が等しいかどうか、複雑度はO(n);
ACコード
class Solution {
public:
    //   :    
    bool isAnagram1(string s, string t) {
        if (s.empty() && t.empty())
            return true;
        else if (s.empty() || t.empty())
            return false;

        sort(s.begin(), s.end());
        sort(t.begin(), t.end());

        if (s == t)
            return true;
        return false;       
    }
    //   :       
    bool isAnagram(string s, string t) {
        vector<int> count(26, 0);
        for (int i = 0; i < s.size(); i++)
            count[s[i] - 'a'] ++;
        for (int i = 0; i < t.size(); i++)
            count[t[i] - 'a'] --;
        for (int i = 0; i < 26; i++)
        if (count[i] != 0)
            return false;
        return true;
    }
};

GitHubテストプログラムソースコード