我必须编写一个接受两个字符串并进行比较的函数,然后返回不同字符串中的字母数。例如,“ 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;
}
答案 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
程序步骤:
("ABC"+"DEC")
用两个合并的单词组成一个字符串:ABCDEC
("ABC"+"DEC").split('').sort().join('')
使字符在字符串ABCCDE
中排序。这将使我们能够使用正则表达式轻松找到重复项
replace(/(.)\1+/g, "")
删除所有2个以上字符的序列,然后我们得到ABDE
.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