---
# System prepended metadata

title: 242. Valid Anagram
tags: [string, Leetcode, python, c++, hash, easy]

---

###### tags: `Leetcode` `easy` `hash` `string` `python` `c++`

# 242. Valid Anagram

## [題目連結:] https://leetcode.com/problems/valid-anagram/description/

## 題目:
Given two strings ```s``` and ```t```, return true if ```t``` is an anagram of ```s```, and ```false``` otherwise.

An **Anagram** is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

**Example 1:**
```
Input: s = "anagram", t = "nagaram"
Output: true
```
**Example 2:**
```
Input: s = "rat", t = "car"
Output: false
```

## 解題想法:
* 此題為判斷t是否為s的重組字
* 使用hash table
    * 紀錄s字串所有字出現次數
    * 再逐一比較t字串即可

## Python:
``` python=
from collections import defaultdict
class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if len(s)!=len(t):
            return False
        dic=defaultdict(int)
        for char in s:
            dic[char]+=1
        for char in t:
            dic[char]-=1
            if dic[char]<0:
                return False
        return True
        
if __name__ == '__main__':
    result = Solution()
    s = "anagram"
    t = "nagaram"
    ans = result.isAnagram(s,t)
    print(ans)
```

## C++:
``` cpp=
#include<bits/stdc++.h>
using namespace std;

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