如何统计两个字符串的公共字符?附代码示例及输出需求
修复统计两个字符串公共字符的JavaScript代码
问题说明
需要统计两个字符串的公共字符,以示例s1 = "abcd"、s2 = "aad"为例,期望输出{a:1, d:1},但现有代码无法得到正确结果。
原代码的问题
原代码存在多处逻辑错误:
let th = spilt2.includes(spilt1[i])得到的是布尔值(true/false),后续用th[i]无法获取对应字符,属于无效操作- 没有考虑两个字符串中字符出现次数的最小值(比如
s2中a出现2次,但s1中仅出现1次,最终公共计数应取1) - 循环内的计数逻辑混乱,无法正确累加有效字符的次数
修复后的代码
var s1 = "abcd"; var s2 = "aad"; function match(s1, s2) { const count1 = {}; const count2 = {}; const result = {}; // 统计s1中每个字符的出现次数 for (const char of s1) { count1[char] = (count1[char] || 0) + 1; } // 统计s2中每个字符的出现次数 for (const char of s2) { count2[char] = (count2[char] || 0) + 1; } // 遍历统计结果,取两个字符串中字符出现次数的最小值 for (const char in count1) { if (count2[char]) { result[char] = Math.min(count1[char], count2[char]); } } return result; } console.log(match(s1, s2)); // 输出 {a:1, d:1}
代码逻辑说明
- 先分别统计两个字符串中每个字符的出现次数,存入
count1和count2对象 - 遍历其中一个统计对象,检查当前字符是否在另一个统计对象中存在
- 若存在,取两个统计次数的最小值作为该公共字符的最终计数,存入结果对象
- 返回结果对象,得到符合预期的公共字符统计结果
内容的提问来源于stack exchange,提问作者abhi
相关产品推荐
相关产品推荐

