[JavaScript 刷题] Code Signal - 共用字符数(commonCharacterCount)

Posted GoldenaArcher

tags:

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

[javascript 刷题] Code Signal - 共用字符数(commonCharacterCount)

题目地址:commonCharacterCount

题目

如下:

Given two strings, find the number of common characters between them.

Example:

For s1 = "aabcc" and s2 = "adcaa", the output should be
commonCharacterCount(s1, s2) = 3.

Strings have 3 common characters - 2 "a"s and 1 “c”.

Input/Output:

  • [execution time limit] 4 seconds (js)

  • [input] string s1

    A string consisting of lowercase English letters.

    Guaranteed constraints:

    1 ≤ s1.length < 15.

  • [input] string s2

    A string consisting of lowercase English letters.

    Guaranteed constraints:

    1 ≤ s2.length < 15.

  • [output] integer

解题思路

其实这一道题和上一道刷的 Code Signal - 所有最长字符串(all longest strings) 有点相似的地方,都是对数组进行迭代,最后将迭代的结果以键值对的方式进行存储。

不过这里存储的键值对是 字符-出现次数。

s1s2 的字符都有了,之后要做的事情就是寻找两个字符串相交的字符,将相交的字符数字相加,就能找到最终的结果。

另外需要注意一点的就是,相交的字符使用的是 Math.min() 去进行求值的操作。

这题对我主要的考验还是 Map 的函数调用,这方面的确卡的有点久。另外,需要注意的是,s1Map.keys() 返回的是一个迭代器,并不能直接使用 Array 的函数进行操作。不使用 Array.from(s1Map.keys()) 转换也可以使用 [...s1Map.keys()] 的方式进行隐式转换。

使用 JavaScript 解题

function commonCharacterCount(s1, s2) {
  const s1Map = getAllOccurance(s1);
  const s2Map = getAllOccurance(s2);

  const intersection = Array.from(s1Map.keys()).filter((key) => s2Map.has(key));

  let sum = 0;

  for (const key of intersection) {
    sum += Math.min(s1Map.get(key), s2Map.get(key));
  }

  return sum;
}

const getAllOccurance = (str) => {
  const map = new Map();

  for (const char of str) {
    if (map.has(char)) {
      const updatedVal = map.get(char) + 1;
      map.set(char, updatedVal);
    } else {
      map.set(char, 1);
    }
  }

  return map;
};

以上是关于[JavaScript 刷题] Code Signal - 共用字符数(commonCharacterCount)的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] Code Signal - 形状面积(shapeArea)

[JavaScript 刷题] Code Signal - 幸运数(is lucky)

[JavaScript 刷题] Code Signal - 翻转括号内字符(reverseInParentheses)

[JavaScript 刷题] Code Signal - 相似数组(Are Similar?)

[JavaScript 刷题] Code Signal - 共用字符数(commonCharacterCount)

[JavaScript 刷题] Code Signal - 矩阵元素之和(matrixElementsSum)