
```cpp
class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length())
            return false;
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s==t;
    }
};
```

- O(nlogn)
- std의 sort를 사용

```
class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length())
            return false;
        unordered_map<char, int> dict;
        for(auto c:s){
            dict[c]++;
        }    
        for(auto c:t){
            if(dict[c]==0){
                return false;
            }
            dict[c]--;
        }
        return true;
        
    }
};
```

- O(n)? => O(nlogn)
- map insert에서 O(logn)씩 소요됨
- 위의 sort보다는 효율적일 수 있음

```cpp
class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length())
            return false;
        vector<int>cntVec(26, 0);
        for(auto c:s){
            cntVec[(int(c-'a'))]++;
        }
        for(auto c:t){
            cntVec[(int(c-'a'))]--;
        }
        for(auto cnt:cntVec){
            if(cnt!=0){
                return false;
            }
        }
        return true;
        
    }
};
```
- O(n)
- 두번째 것과 마찬가지로 저장공간이 필요하나, O(n)으로 종료 가능
- 시간 복잡도를 최대한 최적화 하는 경우

