比较两个字符串并计算不同的字母

时间:2019-11-06 09:21:29

标签: javascript arrays string

我必须编写一个接受两个字符串并进行比较的函数,然后返回不同字符串中的字母数。例如,“ ABC”和“ DEC”应返回4。由于我将它们进行比较,因此我的函数总是缩短一秒钟。我已经看过,但似乎找不到解决方法。

我尝试遍历字符串而不拆分,最终遇到相同的问题。

function makeAnagram(a, b) {
    let result = 0;

    let a1 = a.split("").sort();
    let b1 = b.split("").sort();
    for(let i = 0; i < b1.length; i++){
        if(a1.indexOf(b1[i] < 0)){
            result += 1;
        }
    }


    return result;
 }

4 个答案:

答案 0 :(得分:3)

您可以这样做:

根据{{​​3}}

的建议

编辑

const makeAnagram = (a, b) => {
  const arr1 = a.split('')
  const arr2 = b.split('')
  const diff1 = arr1.filter(letter => !arr2.includes(letter))
  const diff2 = arr2.filter(letter => !arr1.includes(letter))
  
  return diff1.length + diff2.length
}

console.log(makeAnagram('ABC', 'DEC'))

答案 1 :(得分:3)

一行:

("ABC"+"DEC").split('').sort().join('').replace(/(.)\1+/g, "").length

返回

4

程序步骤:

  1. ("ABC"+"DEC")用两个合并的单词组成一个字符串:ABCDEC

  2. ("ABC"+"DEC").split('').sort().join('')使字符在字符串ABCCDE中排序。这将使我们能够使用正则表达式轻松找到重复项

  3. replace(/(.)\1+/g, "")删除所有2个以上字符的序列,然后我们得到ABDE

  4. .length对剩余字符进行计数,这些字符是单次出现的字符。

答案 2 :(得分:2)

使用ES6进行同样操作的方法

const makeAnagram = (a, b) => new Set(a + b).size - new Set([...a].filter(x => b.includes(x))).size;
console.log(makeAnagram('ABC', 'DEC')); // prints 4

答案 3 :(得分:1)

这就是我要做的

实施

let makeAnagram = (a,b) => {
  let clubStr = ('' + a).concat(b);
  let sortedStr = clubStr.trim().split('').sort().join('');
  let uncommonStr = sortedStr.replace(/(\w)\1+/gi, '');
  return uncommonStr.length;
};

您可以在同一根衬里做同样的事情

  

呼叫者:makeAnagram('ABC', 'DCE')

     

输出:4