---
# System prepended metadata

title: \#242 Valid Anagram
tags: [leetcode, leetcode-easy]

---

# \#242 Valid Anagram
## *給定兩字串, 檢查一字串是否為另一字串的重新排列組合結果*
## Log
 - build 20210523 by syhuang

## 優化
 - 省去初見建立的字串陣列空間, 用charAry取代紀錄每個字元(a~z)出現的次數, 紀錄s和t的所有字元出現次數比較是否相同(這邊用了先加後減, 最後看次數是否歸零來判斷兩字串是否互為排列組合)
```javascript=
var isAnagram = function(s, t) {
    var chrAry = Array(26).fill(0);//建立一個長度26的陣列, 存放a-z每個char的出現次數
    for(var i=0; i<s.length; i++){
        chrAry[s[i].charCodeAt() - 'a'.charCodeAt()]++;
    }
    for(var i=0; i<t.length; i++){
        chrAry[t[i].charCodeAt() - 'a'.charCodeAt()]--;
    }
    for(chrCount of chrAry){
        if(chrCount != 0) return false;
    }
    return true;
}
```
## 初見
 - 建立兩字串各自的map, 然後檢查兩map是否相同
```javascript=
var isAnagram = function(s, t) {
    if(s.length != t.length) return false;
    var sAry = s.split('');
    var tAry = t.split('');
    var sMap = new Map();
    var tMap = new Map();
    
    setMap(sAry,sMap);
    setMap(tAry,tMap);
    
    //compare two maps
    for(var [key,val] of tMap){
        if(!sMap.has(key) || sMap.get(key) != tMap.get(key)) return false;
    }
    return true;
    
    function setMap(p_ary, p_o_Map){
        for(var i=0; i<p_ary.length; i++){
            if(p_o_Map.has(p_ary[i])) p_o_Map.set(p_ary[i],p_o_Map.get(p_ary[i])+1);
            else p_o_Map.set(p_ary[i],1);
        }
    }
};
```
## 備註
## 參考
 - [參考解](https://leetcode.com/problems/valid-anagram/discuss/66484/Accepted-Java-O(n)-solution-in-5-lines)
###### tags: `leetcode`, `leetcode-easy`