Skip to content

哈希表

赎金信

js
var canConstruct = function(ransomNote, magazine) {
  if (ransomNote.length > magazine.length) {
    return false;
  }
  const map = {};
  for (const c of magazine) {
    map[c] = (map[c] || 0) + 1
  }
  for (const c of ransomNote) {
    if (!map[c] || map[c] <= 0) return false;
    map[c] = map[c] - 1;
  }
  return true
};

两数之和

js
var twoSum = function(nums, target) {
  const hashMap = new Map();
  for (let i = 0; i < nums.length; i++) {
    if (hashMap.has(target - nums[i])){
      return [hashMap.get(target - nums[i]), i]
    }
    hashMap.set(nums[i], i)
  }
};

存在重复元素 II

js
var containsNearbyDuplicate = function(nums, k) {
  const map = new Map();
  const length = nums.length;
  for (let i = 0; i < length; i++) {
    const num = nums[i];
    if (map.has(num) && i - map.get(num) <= k) {
      return true;
    }
    map.set(num, i);
  }
  return false
};

快乐数

js
var isHappy = function(n) {
  const getSum = function(n) {
    let sum = 0;
    while(n > 0) {
      sum += (n % 10) ** 2;
      n = Math.floor(n / 10);
    }
    return sum;
  }
  let hash = new Set();
  while(n !== 1) {
    n = getSum(n);
    if(hash.has(n)) return false;
    hash.add(n)
  }
  return n === 1
};

有效的字母异位词

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

  for (let i = 0; i < t.length; i++){
    if (!map[t[i]] || map[t[i]] <= 0) return false
    map[t[i]] = map[t[i]] - 1;
  }
  return true
};

同构字符串

js
var isIsomorphic = function(s, t) {
  const s2t = {};
  const t2s = {};
  const len = s.length
  for (let i = 0; i < len; ++i) {
    const x = s[i]
    const y = t[i];
    if ((s2t[x] && s2t[x] !== y) || (t2s[y] && t2s[y] !== x)) {
      return false
    }
    s2t[x] = y;
    t2s[y] = x;
  }
  return true;
};

单词规律

js
var wordPattern = function(pattern, s) {
  const arr = s.split(' ');
  const map = new Map();
  const maps = new Map();
  if (pattern.length != arr.length) return false;

  for (let i = 0; i < pattern.length; i++) {
    if (maps.has(arr[i]) === false) {
      maps.set(arr[i], pattern[i])
    } else {
      if (maps.get(arr[i]) != pattern[i]) {
        return false
      }
    }

    if (map.has(pattern[i]) === false) {
      map.set(pattern[i], arr[i]);
    }  else {
      if (map.get(pattern[i]) != arr[i]) {
        return false
      }
    }
  }
  return true
};

Released under the MIT License.