1. https://leetcode-cn.com/problems/valid-anagram/submissions/

时间复杂度:O(nlogn)
排序:将字符串转换为数组进行排序,排序的结果在转成字符串进行判断。

  1. /**
  2. * @param {string} s
  3. * @param {string} t
  4. * @return {boolean}
  5. */
  6. var isAnagram = function(s, t) {
  7. if(s.length !== t.length) return false
  8. return s.split("").sort().join('') == t.split("").sort().join('')
  9. };

时间复杂度:O(n)
哈希表:利用哈希表将S字符串字母出现的次数放在map中,T字符串对map对应的字母做减法,如果次数为1,删除对应的索引。最后判断map的size是否为0。

  1. /**
  2. * @param {string} s
  3. * @param {string} t
  4. * @return {boolean}
  5. */
  6. var isAnagram = function(s, t) {
  7. if(s.length !== t.length) return false
  8. const map = new Map()
  9. for (let i = 0; i < s.length; i++) {
  10. const getMap = map.get(s[i])
  11. if (!getMap) {
  12. map.set(s[i], 1)
  13. } else {
  14. map.set(s[i], getMap + 1)
  15. }
  16. }
  17. for (let i = 0; i < t.length; i++) {
  18. const getMap = map.get(t[i])
  19. if (getMap === 1) {
  20. map.delete(t[i])
  21. } else if (getMap) {
  22. map.set(t[i], getMap - 1)
  23. } else {
  24. map.set(t[i], 1)
  25. }
  26. }
  27. return !map.size
  28. };

2. https://leetcode-cn.com/problems/group-anagrams/

时间复杂度:O(n)
将数组中的每一个字符串进行排序作为map的key。排序结果相同key的值放在一个数组中,存到map。

  1. var groupAnagrams = function(strs) {
  2. if(!Array.isArray(strs) && !strs.length) return fasle
  3. let map = new Map()
  4. strs.forEach(item => {
  5. const key = item.split("").sort().join("")
  6. map.has(key) ? map.get(key).push(item) : map.set(key,[item])
  7. })
  8. return Array.from(map.values())
  9. };