计算唯一重复项出错

Eggs_on_rocks

我遇到了这个挑战,您必须计算所提供的字符串中有多少重复项。

我想出了这段代码,如果有重复,则应该对字符串进行排序,并将它们计为总数的+1。如果这封信不是重复的->只需拼接它们,以便我继续前进。

代码是怎么回事?我不想为挑战提供答案,而是想知道我哪里做错了。为什么只有在相同字母中有4个以上的代码才能注册重复项?

这是代码,请注意,我仅使用var e来查看要拼接的数组的哪一部分。

预期输出:

[[p, p], [a, a, a, a], [c, c, c, c, c, c, c, c], [d, d, d, d], [g, g, g], [e, e]]

如果同一字符切片出现2次以上,则将大块重复项放入新数组中。

function duplicateCount(text) {
  const str = Array.from(text.toLowerCase()).sort();
  var h = 0;
  var e = [];
  for (let i = 0; i < str.length; i++) {
    if (str.lastIndexOf(str[i]) > 2) {
      h++;
      e.push(str.splice(0, str.lastIndexOf(str[i]) + 1));
      i = 0;
    } else {
      str.splice(0, 1);
      i = 0
    }
  }
  return e
}
console.log(duplicateCount('ppaaaaccccccccgggiyddddhee'));

epascarello

您的代码在删除匹配项时会将索引设置回零。问题在于循环中的下一个迭代使其从索引1开始,而不是0。因此您需要将其设置为-1。实际上,使用while循环会更好。

下一个问题是您在说下一个索引必须>2。问题在于索引的含义是什么pp不是两个。您要确保索引不是同一元素。

function duplicateCount(text) {
  const str = Array.from(text.toLowerCase()).sort();
  var h = 0;
  var e = [];
  for (let i = 0; i < str.length; i++) {
    if (str.lastIndexOf(str[i]) != i) {
      h++;
      e.push(str.splice(0, str.lastIndexOf(str[i]) + 1));
      i = -1;
    } else {
      str.splice(0, 1);
      i = -1
    }
  }
  return e
}
console.log(duplicateCount('ppaaaaccccccccgggiyddddhee'));

有一个while循环

function duplicateCount(text) {
  const str = Array.from(text.toLowerCase()).sort();
  var h = 0;
  var e = [];
  while (str.length) {
    var lastIndex = str.lastIndexOf(str[0])
    var removed = str.splice(0, lastIndex + 1);
    if (lastIndex) {
      h++;
      e.push(removed);
    }
  }
  return e
}
console.log(duplicateCount('ppaaaaccccccccgggiyddddhee'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章