算法题-有效的字母异位词【JS实现】

有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

输入: s = “anagram”, t = “nagaram”
输出: true

输入: s = “rat”, t = “car”
输出: false

排序

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
  if (s.length !== t.length) return false;
  return [...s].sort().join() === [...t].sort().join()
};

哈希表

var isAnagram = function (s, t) {
  if (s.length !== t.length) return false;
  let map = {};
  for (let i = 0; i < s.length; i++) {
    map[s[i]] ? map[s[i]]++ : map[s[i]] = 1
    map[t[i]] ? map[t[i]]-- : map[t[i]] = -1
  }

  return Object.keys(map).every(v => map[v] === 0)
};
var isAnagram = function (s, t) {
  if (s.length !== t.length) return false;
  let map = {};
  for (let i of s) map[i] = (map[i] || 0) + 1 
  for (let j of t) if (!map[j]--) return false; 

  return true
};

数组

var isAnagram = function (s, t) {
  if (s.length !== t.length) return false;
  const buckes = [];
  const chartA = 'a'.charCodeAt(0)
  
  for (let i of s) {
    buckes[i.charCodeAt(0) - chartA] = (buckes[i.charCodeAt(0) - chartA] || 0) + 1
  }

  for (let j of t) {
    if (!buckes[j.charCodeAt(0) - chartA]) return false;
    buckes[j.charCodeAt(0) - chartA]--;
  }
  
  return true
};

你可能感兴趣的:(Crystalの算法学习)