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