【问题标题】:My code is not comparing two different strings correctly我的代码没有正确比较两个不同的字符串
【发布时间】:2020-06-21 01:05:10
【问题描述】:

我正在尝试解决这个代码战问题:

完成函数 scramble(str1, str2),如果 a str1 字符的一部分可以重新排列以匹配 str2,否则 返回 false。

例子:

 scramble('rkqodlw', 'world') ==> True
 scramble('cedewaraaossoqqyt', 'codewars') ==> True 
 scramble('katas', 'steak') ==> False

这是我的尝试:

function scramble(str1, str2) {
  let obj1 = {};
  let obj2 = {};
  for (el of str1) {
    obj1[el] = (obj1[el] || 0) + 1;
  }
  for (el of str2) {
    obj2[el] = (obj2[el] || 0) + 1;
  }
  for (el in obj2) {
    if (!(el in obj1)) return false;
  }
  return true;
}

我将字符串转换为对象,然后将键相互比较。我的代码通过了 Codewars 上大约 90% 的测试,但是它没有通过另外 10% 的测试,不幸的是它们没有显示测试输入是什么。

我的直觉是这段代码没有捕捉到一些边缘情况。任何帮助将不胜感激。

【问题讨论】:

  • 替换规则是什么?换句话说,如果我打电话给scramble("a","aa"),“a”可以重用吗?大写有什么特殊规定,还是大写还是小写还是小写?

标签: javascript string algorithm object


【解决方案1】:

str2 的字母实例多于str1 时,您将需要处理这种情况。

例如:

scramble("a", "aa")

应该评估为假(“a”中的“a”不足以形成“aa”)。

【讨论】:

    【解决方案2】:

    您需要处理字符数量。现在您只需检查str2 中的字符是否也存在于str1 中。

    所以而不是:

     for (el in obj2) {
        if (!(el in obj1)) return false;
      }
    

    试试:

    for (let [key, value] of Object.entries(obj2)) {
        if (obj1[key] === undefined || obj1[key] < value) return false;
      }
    

    这意味着如果obj1[key] 不存在或者它的出现次数少于obj2[key],它将返回false

    【讨论】:

      【解决方案3】:

      这段代码可能有帮助

      function scramble(str1, str2) {
      
          let occurences = str1.split("").reduce((arr, cur) => { arr[cur] ? arr[cur]++ : arr[cur] = 1; return arr; }, {});
      
          console.log(occurences);
      
          return str2.split("").every((character) => --occurences[character] >= 0);
      }
      
      console.log(scramble("awpoirwled", "world"));

      【讨论】:

        【解决方案4】:

        我将使用的算法是获取匹配字符串的每个字母,如果它在搜索的字符串中得到等价的,则将其从那里删除并继续,否则如果没有匹配则中止。 如果你在没有中止的情况下到达匹配字符串的末尾,那么你有一个匹配

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多