[JavaScript 刷题] 哈希表 - 查找共用字符, leetcode 1002

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 哈希表 - 查找共用字符, leetcode 1002相关的知识,希望对你有一定的参考价值。

[javascript 刷题] 哈希表 - 查找共用字符, leetcode 1002

题目地址:1002. Find Common Characters

题目如下:

Given a string array words, return an array of all characters that show up in all strings within the words (including duplicates). You may return the answer in any order.

解题思路

这两题做的我有点怀疑我的阅读理解能力……嗯……

因为是 online OA 做的,题目里面也没有提示用什么数据结构,所以刚开始用了 Set 去解题,然后卡死在了这个测试上:

Input: [“cool”,“lock”,“cook”]

Output: [“c”,“o”,“o”]

Expected: [“c”,“o”]

用 Set 的话只能判断字符串中是否有该字符,而无法正确判断字符的数量,因此这里需要使用 Map 去存储字符以及其对应出现的次数,并且在确认字符存在于所有单词后进行 decrement。

使用 JavaScript 解题

const containsVal = (char, wordSets) => 
  for (let j = 1; j < wordSets.length; j++) 
    if (!wordSets[j].get(char) || wordSets[j].get(char) === 0) return false;
  

  for (let j = 1; j < wordSets.length; j++) 
    const currMap = wordSets[j];
    currMap.set(char, currMap.get(char) - 1);
  

  return true;
;

/**
 * @param string[] words
 * @return string[]
 */
var commonChars = function (words) 
  const wordMaps = [];

  for (const word of words) 
    const wordMap = new Map();
    for (let i = 0; i < word.length; i++) 
      const char = word[i];
      if (wordMap.has(char)) 
        wordMap.set(char, wordMap.get(char) + 1);
       else 
        wordMap.set(char, 1);
      
    
    wordMaps.push(wordMap);
  

  const res = [];

  for (let i = 0; i < words[0].length; i++) 
    const char = words[0][i];
    if (containsVal(char, wordMaps)) res.push(char);
  

  return res;
;

以上是关于[JavaScript 刷题] 哈希表 - 查找共用字符, leetcode 1002的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 哈希表 - 存在重复元素, leetcode 217

[JavaScript 刷题] 哈希表 - 日志速率限制器, leetcode 359

[JavaScript 刷题] 哈希表 - 和为 K 的子数组, leetcode 560

[JavaScript 刷题] 哈希表 - 两个数组的交集 II,leetcode 350

[JavaScript 刷题] 哈希表 - 和为 K 的子数组, leetcode 560

[JavaScript 刷题] 哈希表 - 检查一个字符串是否包含所有长度为 K 的二进制子串, leetcode 1461