有同学在群里问了个问题,笔试的时候遇到一个问题:在Javascript里,给定两个字符串,找出他们之间共有字符的个数。
分析
首先遇到这个题目,不要慌,像这种题目,考察的问题就是遍历和过滤的知识点,我们可以在大脑里回顾下思路。今天小编给大家分享一些方法,参考下吧。
方案
我们这里列举多种方案来分析。
1、Set数据结构
可以使用JavaScript中的Set数据结构来解决这个问题。首先,将第一个字符串转换为Set对象,然后遍历第二个字符串的每个字符,检查是否在Set中存在。如果存在,则将其从Set中删除,并且共有字符的个数加1。最后返回共有字符的个数。
以下是使用JavaScript实现的代码示例:
function findCommonChars(str1, str2) { let set = new Set(str1); let count = 0; for (let char of str2) { if (set.has(char)) { set.delete(char); count++; } } return count; } // 示例用法 console.log(findCommonChars("abcde", "cdefg")); // 输出:3
在上面的示例中,findCommonChars
函数接受两个字符串作为参数,并返回共有字符的个数。在示例用法中,字符串"abcde"和"cdefg"之间共有3个字符:"c"、"d"和"e"。因此,输出为3。
2、嵌套遍历
对两个字符串进行遍历,然后查找相同的匹配。代码如下:
function countCommonChars(str1, str2) { let count = 0; for (let i = 0; i < str1.length; i++) { for (let j = 0; j < str2.length; j++) { if (str1[i] === str2[j]) { count++; break; } } } return count; } // 测试 console.log(countCommonChars('hello', 'world')); // 2 console.log(countCommonChars('javascript', 'python')); // 3 console.log(countCommonChars('abc', 'xyz')); // 0
这个方法比较常规。
3、使用ES6中的new Set
这种方法是最简单的,代码几行搞定,我们使用includes方法进行判断,然后使用filter进行过滤,最后通过new Set找到共有字符的个数size。
const str1 = "hello", str2 = "world", commonChars = new Set([...str1].filter(char => str2.includes(char))), count = commonChars.size; console.log(commonChars); console.log(count);
这里可以说明下,可能有些同学对于size不熟悉,大家可以看到先用console打印出
console.log(commonChars);
的记录,然后看到:
然后就可以看到size属性了,是不是很清晰了。
总结
关于这些方法,小编是极力推荐第三种的,因为简便,代码量又少。如果您还有更好的方法,也可以留言。
网友评论文明上网理性发言 已有0人参与
发表评论: