首页 > 解决方案 > 在我的字谜问题中,我不明白为什么计数器是 16

问题描述

我的问题是关于字谜,这个函数需要测试 var test 是否与 original 相同,但在我的情况下,计数器是 16,但我不明白为什么。我调试了但不清楚。感谢您的帮助!

var isAnagram = function(test, original) {   //anagram function test
        let counter=0;
      let test1 = test.toLowerCase().split("");
  let original1=original.toLowerCase().split("");

  const test2= new Set(test1);
  const original2= new Set(original1);

  for(let i of test2)
  {
      for(let j of original2)
      {
          if (test2[i] == original2[j])
          {
              counter++;
          }
      }
  }
  console.log(counter);
   if (counter == test2.length)
   {
       return true;
   }
  return false;


};
console.log(isAnagram("foefet", "toffee")); //case

标签: javascriptnode.js

解决方案


  • for(let i of Set) 已经返回值,而不是索引。
  • 您的算法使用这些值作为索引。这总是返回未定义
  • 所有的比较都是真的(因为 undefined === undefined)
  • 您提供的一组输入字符串有 4 个成员 (f,o,e,t)。
  • 您遍历外部集,然后遍历内部集。即 16 次比较,16 * true => 计数器增加 16 倍。

但是,即使您解决了这个问题,该算法也不起作用 - 结果将是 4,因为每个字母都被计算一次(该集合只包含一个)。

您需要重新考虑您的算法(我不会剧透,因为这会破坏您的锻炼)。作为提示,我不认为集合在这里是一个好工具。


推荐阅读