[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) 有点相似的地方,都是对数组进行迭代,最后将迭代的结果以键值对的方式进行存储。
不过这里存储的键值对是 字符-出现次数。
在 s1
和 s2
的字符都有了,之后要做的事情就是寻找两个字符串相交的字符,将相交的字符数字相加,就能找到最终的结果。
另外需要注意一点的就是,相交的字符使用的是 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?)