字符串javascript中常见的字符数

问题描述 投票:1回答:5

这是问题:给定两个字符串,找到它们之间的公共字符数。以及它的一个例子:

对于s1 =“aabcc”和s2 =“adcaa”,输出应为3。

我写了这段代码:

function commonCharacterCount(s1, s2) {
    var count = 0;
    var str="";
    for(var i=0; i<s1.length ; i++){
        if(s2.indexOf(s1[i])>-1 && str.indexOf(s1[i])==-1){
            count++;
            str.concat(s1[i])
        }
    }                   
        
    return count;
}

它没有给出正确答案,我想知道我哪里错了?非常感谢任何帮助

javascript indexof
5个回答
0
投票

还有其他更有效的答案,但这个答案更容易理解。这循环遍历第一个字符串,并检查第二个字符串是否包含该值。如果是,则计数增加,并且删除s2中的元素以防止重复。

function commonCharacterCount(s1, s2) {
    var count = 0;
    s1 = s1.split('');
    s2 = s2.split('');
    
    s1.forEach(e => {
      if (s2.includes(e)) {
        count++;
        s2.splice(s2.indexOf(e), 1);
      }
    });
        
    return count;
}

console.log(commonCharacterCount("aabcc", "adcaa"));

2
投票

您可以通过以下步骤执行此操作:

  1. 创建一个返回对象的function。键为字母,计为值
  2. 在主要的function中获取两个字符串的计数对象
  3. 使用for..in迭代任何对象
  4. 检查其他对象有第一个对象的key
  5. 如果它使用count将至少一个添加到Math.min()

let s1 = "aabcc"
let s2 = "adcaa"

function countChars(arr){
  let obj = {};
  arr.forEach(i => obj[i] ? obj[i]++ : obj[i] = 1);
  return obj;
}


function common([...s1],[...s2]){
  s1 = countChars(s1);
  s2 = countChars(s2);
  let count = 0;
  for(let key in s1){
    if(s2[key]) count += Math.min(s1[key],s2[key]);
  }
  return count
}
console.log(common(s1,s2))

1
投票

原因.concat不会改变调用的字符串,但它会返回一个新字符串,执行:

str = str.concat(s1[i]);

要不就

str += s1[i];

0
投票

您可以存储每个字符的频率并查看此映射(char-> frequency)并找到常用字符。

function common(a, b) {
    const m1 = {};
    const m2 = {};
    let count = 0;
    for (const c of a) m1[c] = m1[c] ? m1[c]+1 : 1;
    for (const c of b) m2[c] = m2[c] ? m2[c]+1 : 1;
    for (const c of Object.keys(m1)) if (m2[c]) count += Math.min(m1[c], m2[c]);
    return count;
}

0
投票

在发布问题后,我发现我没有好好看看这个例子。我认为它需要独特的共同角色..而且我改变它,现在它是正确的

function commonCharacterCount(s1, s2) {
    var count = 0;
    var str="";
    for(var i=0; i<s1.length ; i++){
        if(s2.indexOf(s1[i])>-1){  
            count++;
            s2=s2.replace(s1[i],'');
        }
    }                   
        
    return count;
}
© www.soinside.com 2019 - 2024. All rights reserved.