计算错误的唯一重复项

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

我想出了这段代码,如果有重复的字符串,应该对字符串进行排序,拼接它们并将它们计为总数+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'));


素胚勾勒不出你
浏览 99回答 2
2回答

富国沪深

当您的代码删除匹配项时,会将索引设置回零。问题是循环中的下一次迭代使其从索引 1 而不是 0 开始。因此您需要将其设置为 -1。实际上,使用 while 循环会更好。下一个问题是你说下一个索引必须> 2。问题是索引是什么pp?这不是两个。您要确保索引不是同一个元素。function duplicateCount(text) {&nbsp; const str = Array.from(text.toLowerCase()).sort();&nbsp; var h = 0;&nbsp; var e = [];&nbsp; for (let i = 0; i < str.length; i++) {&nbsp; &nbsp; if (str.lastIndexOf(str[i]) != i) {&nbsp; &nbsp; &nbsp; h++;&nbsp; &nbsp; &nbsp; e.push(str.splice(0, str.lastIndexOf(str[i]) + 1));&nbsp; &nbsp; &nbsp; i = -1;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; str.splice(0, 1);&nbsp; &nbsp; &nbsp; i = -1&nbsp; &nbsp; }&nbsp; }&nbsp; return e}console.log(duplicateCount('ppaaaaccccccccgggiyddddhee'));有一个 while 循环function duplicateCount(text) {&nbsp; const str = Array.from(text.toLowerCase()).sort();&nbsp; var h = 0;&nbsp; var e = [];&nbsp; while (str.length) {&nbsp; &nbsp; var lastIndex = str.lastIndexOf(str[0])&nbsp; &nbsp; var removed = str.splice(0, lastIndex + 1);&nbsp; &nbsp; if (lastIndex) {&nbsp; &nbsp; &nbsp; h++;&nbsp; &nbsp; &nbsp; e.push(removed);&nbsp; &nbsp; }&nbsp; }&nbsp; return e}console.log(duplicateCount('ppaaaaccccccccgggiyddddhee'));

汪汪一只猫

认为使用正则表达式可以更好地做到这一点,并map()分离出正则表达式匹配的每个字符串。然后,正如您所要求的,我们剩下一个字符串数组的数组。(.)- 第一个捕获组 - 匹配任何字符\1- 匹配与第一个捕获组相同的文本+- 匹配 1 次至无限次const testString = "ppaaaaccccccccgggiyddddheep";function getAllDuplicates(str) {&nbsp; return str.split("") // split by character&nbsp; &nbsp; .sort() // sort the array&nbsp; &nbsp; .join("") // join back into sorted string&nbsp; &nbsp; .match(/(.)\1+/g) // match repeated characters&nbsp; &nbsp; .map(string => string.split("")); // use map to split each string in arr to get arr of strings}function getConsecutiveRepeating(str) {&nbsp; return str.match(/(.)\1+/g) // match repeated characters&nbsp; &nbsp; .map(string => string.split("")); // use map to split each string in arr to get arr of strings}console.log(getAllDuplicates(testString));console.log(getConsecutiveRepeating(testString));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript