我的代码正在运行,除了变异([“Mary”,“Army”])应该返回true,但它返回false并且 mut([“Mary”,“Aarmy”])应该返回true,但它返回false。
有人可以解释为什么会这样吗?
到目前为止我的代码
function mutation(arr) {
a=arr.slice(0,1); var a_str = a.toString(); a_arr = Array.from(a_str);
b=arr.slice(1,2); var b_str = b.toString(); b_arr = Array.from(b_str);
var flag=0;
for(var i=0;i<b_arr.length;i++){
for(var j=0;j<a_arr.length;j++){
if(b_arr[i]==a_arr[j]){
flag+=1;
}
}
}
if(flag>=b_arr.length){
return true;
} else return false;
}
console.log(mutation(["Mary", "Aarmy"]));
答案 0 :(得分:1)
您的代码存在的问题是JavaScript是case-sensitive
,而您的代码并不期望这样,您可以执行以下操作:
如果两者在这种情况下相同:
然后你基本上可以进行anagram检查:
anagram = _ => _.toLowerCase().split('').sort().join('').trim();
const isAnagram = _ => anagram(_[0]) === anagram(_[1])
&#13;
另外,你可以沿着这些方向做点什么:
check = a => !a[0].split ``.map(_ => _[X = `toLowerCase`]()).filter(_ => !a[1].includes(_[X]())).length
console.log(check(['Mary','Aarmy']))
&#13;
答案 1 :(得分:1)
如果使用Set
,您可以非常简单地执行此操作。例如:
const mutation = arr => {
var a = new Set(arr[0].toLowerCase())
var b = new Set(arr[1].toLowerCase())
return [...a].every(ch => b.has(ch))
}
console.log(mutation(["Mary", "Army"]))
console.log(mutation(["Mary", "Aarmy"]))
console.log(mutation(["Mary", "Aary"]))
console.log(mutation(["ab", "abba"]))
console.log(mutation(["voodoo", "no"]))
&#13;
我仍然觉得这个问题存在一些含糊之处,但如果需要准确性,你也可以检查设定的尺寸是否相等(因为它们包含所有独特的字母)
答案 2 :(得分:0)
您可以使用map
,filter
和toLowerCase
功能来实现这一目标。
示例:强>
function mutation(arr){
return !arr[0].split("")
.map(x => x.toLowerCase())
.filter(l => !arr[1].includes(l.toLowerCase())).length
}
var res = mutation(["Mary", "Aarmy"]);
console.log(res); //true
答案 3 :(得分:0)
您需要使用toLowerCase()
来比较每个字符与不区分大小写。你可以进一步删除额外的内循环,并做这样的事情:
function mutation(checkArray){
var firstElement = checkArray[0];
var secondElement = checkArray[1];
var splitSecondElement = secondElement.split('');
var matched = true;
for(var i=0; i<splitSecondElement.length; i++){
var firstElementLower = firstElement.toLowerCase();
var characterLower = splitSecondElement[i].toLowerCase();
if(firstElementLower.indexOf(characterLower) === -1){
matched = false;
break;
}
}
return matched;
}
console.log(mutation(["Mary", "Army"]));
console.log(mutation(["Mary", "Aarmy"]));
console.log(mutation(["Mary", "Aarmyxyz"]));