Javascript 比较两个字符串并计算不同的字母
我必须编写一个函数,它接收两个字符串并进行比较,然后返回字符串中不同的字母数。例如,“ABC”和“DEC”应该返回4。我的函数总是出现一个短值,因为我是如何比较它们的。我看过了,但似乎找不到解决办法 我尝试过在字符串中循环而不拆分,结果也遇到了同样的问题Javascript 比较两个字符串并计算不同的字母,javascript,arrays,string,Javascript,Arrays,String,我必须编写一个函数,它接收两个字符串并进行比较,然后返回字符串中不同的字母数。例如,“ABC”和“DEC”应该返回4。我的函数总是出现一个短值,因为我是如何比较它们的。我看过了,但似乎找不到解决办法 我尝试过在字符串中循环而不拆分,结果也遇到了同样的问题 function makeAnagram(a, b) { let result = 0; let a1 = a.split("").sort(); let b1 = b.split("").sort(); fo
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;
}
函数生成语法(a,b){
设结果=0;
设a1=a.split(“”.sort();
设b1=b.split(“”.sort();
for(设i=0;i
您可以执行以下操作:
根据建议编辑
const makeAnagram=(a,b)=>{
常数arr1=a.split(“”)
常数arr2=b.split(“”)
常量diff1=arr1.filter(字母=>!arr2.includes(字母))
常量diff2=arr2.filter(字母=>!arr1.includes(字母))
返回diff1.length+diff2.length
}
console.log(makeAnagram('ABC','DEC'))
在一行中:
("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
统计剩余的字符,这些字符只出现一次ES6中也有这样做的方法
constmakeanagram=(a,b)=>新集合(a+b).size-新集合([…a].filter(x=>b.includes(x)).size;
console.log(makeAnagram('ABC','DEC'));//印刷品4
这就是我要做的
实施
您可以在一行中执行相同的操作
调用方:makeAnagram('ABC','DCE')
输出:4
您的结束括号位于错误的位置
a1.indexOf(b1[i]<0)
应该是a1.indexOf(b1[i])<0
。此外,无需执行.sort()
当每个单词中有3个字母时,“ABC”和“DEC”如何返回4…@Gibor-因为它们在不同的后面letters@gibor它们有共同的C
,所以不同的是ABDE
,长度为4。请问如果ABCC和DEC?相同的4或5?我试图写一些类似的东西,但忘记了。包括。使用[…diff1,…diff2]。长度对我来说似乎有点太长了。如果只使用diff1.length+diff2.length
,不是更简单更快吗?@freefiller感谢您的评论。。我已经重构了,因为它看起来更好!谢谢@MattEllen。奇怪的是@TEbogo,我建议@SumitRamteke是的,我看到了你的答案,你在我的答案提交后至少5分钟提交了它,我的答案在你提交你的答案时已经被接受:)它看起来很整洁,但是,会发生什么:(“AA”+“ZZ”).split(“”).sort().join(“”)。replace(/(。\1+/g,”)。length
?
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;
};