计算匹配的字母一次
Count matching letters once
我正在创建一个儿童学习工具,其形式可以匹配一个单词的 4 个字母。
我想统计一个单词中匹配的字符数。但它将重复的字母计为 2 个而不是 1 个。例如,如果单词是 "loot",并且用户提交 "flop",匹配的字母是 3 而不是 2,因为它计算了 "o" 两次。我该如何解决?非常感谢
function countMatching(str1, str2) {
var c = 0;
for (var i = 0; i < str1.length; i++) {
if (str2.includes(str1[i]))
c += 1;
}
matchingLetters = c;
}
一种使用集合的可能方法。
我将字符串转换为一个集合并返回到一个数组
所以如果 str1
是 loot
那么 str1Set
将是 ['l','o','t']
。其余相同
let matchingLetters;
function countMatching(str1, str2) {
var c = 0;
str1Set = [...new Set([...str1])]
str2Set = [...new Set([...str2])]
for (var i = 0; i < str1Set.length; i++) {
if (str2Set.includes(str1Set[i]))
c += 1;
}
matchingLetters = c;
}
countMatching('loot', 'flop')
console.log(matchingLetters)
function countMatching(str1, str2) {
var c = [];
for (var i = 0; i < str1.length; i++) {
if (str2.includes(str1[i]))
if (!c.includes(str1[i])) c.push(str1[i])
}
matchingLetters = c.length;
}
我是在标签上写的,所以可能会有错误
我所做的是使 c 成为一个列表,其中包含两个字符串之间共享的每个字符。并且只有当该字符不存在时才会将新字符推送到 c 中,从而使其成为唯一字符列表。
然后您可以获得列表的长度,甚至可以将列表用于其他目的
我做了一个@cmgchess 答案的替代版本,它创建了一个字母的实际解决方案数组,仍然可以猜测,并删除输入的解决方案中遇到的每个字母。
let matchingLetters;
function countMatching(str1, str2) {
var c = 0;
str1Arr = str1.split('');
for (var i = 0; i < str2.length; i++) {
if (str1Arr.includes(str2[i])) {
c += 1;
str1Arr.splice(str1Arr.indexOf(str2[i]), 1);
}
}
matchingLetters = c;
}
countMatching('loot', 'boot')
console.log(matchingLetters)
我正在创建一个儿童学习工具,其形式可以匹配一个单词的 4 个字母。
我想统计一个单词中匹配的字符数。但它将重复的字母计为 2 个而不是 1 个。例如,如果单词是 "loot",并且用户提交 "flop",匹配的字母是 3 而不是 2,因为它计算了 "o" 两次。我该如何解决?非常感谢
function countMatching(str1, str2) {
var c = 0;
for (var i = 0; i < str1.length; i++) {
if (str2.includes(str1[i]))
c += 1;
}
matchingLetters = c;
}
一种使用集合的可能方法。
我将字符串转换为一个集合并返回到一个数组
所以如果 str1
是 loot
那么 str1Set
将是 ['l','o','t']
。其余相同
let matchingLetters;
function countMatching(str1, str2) {
var c = 0;
str1Set = [...new Set([...str1])]
str2Set = [...new Set([...str2])]
for (var i = 0; i < str1Set.length; i++) {
if (str2Set.includes(str1Set[i]))
c += 1;
}
matchingLetters = c;
}
countMatching('loot', 'flop')
console.log(matchingLetters)
function countMatching(str1, str2) {
var c = [];
for (var i = 0; i < str1.length; i++) {
if (str2.includes(str1[i]))
if (!c.includes(str1[i])) c.push(str1[i])
}
matchingLetters = c.length;
}
我是在标签上写的,所以可能会有错误
我所做的是使 c 成为一个列表,其中包含两个字符串之间共享的每个字符。并且只有当该字符不存在时才会将新字符推送到 c 中,从而使其成为唯一字符列表。
然后您可以获得列表的长度,甚至可以将列表用于其他目的
我做了一个@cmgchess 答案的替代版本,它创建了一个字母的实际解决方案数组,仍然可以猜测,并删除输入的解决方案中遇到的每个字母。
let matchingLetters;
function countMatching(str1, str2) {
var c = 0;
str1Arr = str1.split('');
for (var i = 0; i < str2.length; i++) {
if (str1Arr.includes(str2[i])) {
c += 1;
str1Arr.splice(str1Arr.indexOf(str2[i]), 1);
}
}
matchingLetters = c;
}
countMatching('loot', 'boot')
console.log(matchingLetters)