【问题标题】:Return true if the string in the first element of the array contains all of the letters of the string in the second element of the array如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回 true
【发布时间】:2022-02-20 10:19:35
【问题描述】:

我的代码正在运行,除了 mutation([“Mary”, “Army”]) 应该返回 true,但它返回 false 并且 mutation([“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"]));

【问题讨论】:

  • 您是否处理区分大小写(大写)? IE。 "M""m" 不同
  • javascript 区分大小写。
  • 是的,我试过了,非常感谢。但现在我正在尝试突变([“voodoo”,“no”]);它应该返回 false 但它正在返回 true。

标签: javascript arrays mutation


【解决方案1】:

问题:

您的代码的问题是 JavaScript 是 case-sensitive,而您的代码并不期望这样,所以您可以这样做:

解决办法:

如果在这种情况下两者相等:

那么你基本上可以做字谜检查:

anagram = _ => _.toLowerCase().split('').sort().join('').trim();

const isAnagram = _ => anagram(_[0]) === anagram(_[1])

否则,您可以按照以下方式做一些事情:

check = a => !a[0].split ``.map(_ => _[X = `toLowerCase`]()).filter(_ => !a[1].includes(_[X]())).length

console.log(check(['Mary','Aarmy']))

【讨论】:

    【解决方案2】:

    如果您使用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"]))

    我仍然觉得这个问题有些模棱两可,但如果需要准确,您也可以检查设置的大小是否相等(因为它们包含所有唯一的字母)

    【讨论】:

      【解决方案3】:

      您可以使用mapfiltertoLowerCase 函数来实现这一点。

      示例:

      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

      【讨论】:

        【解决方案4】:

        您需要使用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"]));

        【讨论】:

          【解决方案5】:
          var yes;
          function mutation(arr){
          arr[1]=arr[1].toLowerCase();
          arr[0]=arr[0].toLowerCase();
          
          for (var i=0; i<a[1].length; i++){
              if(!(arr[0].includes(arr[1].charAt(i))){
              return yes= false;
              }
              else{
                   yes= true;
                    }
             }
             console.log(yes);
            }
            mutation(["hello","hey"]);
          

          【讨论】:

          • 请解释一下你的代码是做什么的。
          • 这是一个免费的代码营问题,我的代码有效。因此,如果可以在第一个数组中找到第二个数组中的字符,它将返回 true,否则将返回 false。我写的 if 语句只是意味着如果第一个数组 arr[0] 不包括第二个数组中的单个字符,则返回 false。在这里,嘿是第二个数组,我们使用 charAt(i) 遍历所有字符,所有字符都需要存在于第一个数组中。 var yes 是一个布尔值,一旦有一个字符不匹配,就会被覆盖为 false
          猜你喜欢
          • 1970-01-01
          • 2019-10-10
          • 1970-01-01
          • 2012-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-05
          • 1970-01-01
          相关资源
          最近更新 更多