# \#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`