我正在尝试为字符串a3b2c4d3显示这样的aaabbccccddd输出。

我尝试了下面的代码,但没有得到想要的结果。



var countLetters = "aaabbccccddd";
console.log("countLetters.length --->" + countLetters.length);
var countNumberLetter = 0;
var i;
var a;

for (i = 0; i < countLetters.length; i++) {

  if (countLetters[i] == countLetters[i + 1]) {
    countNumberLetter = countNumberLetter + 1;

  }

}

console.log("countNumberLetter--------->" + countLetters[i] + countNumberLetter);

最佳答案

使用两个循环。使用外部while来循环字符串。只要遇到新字母,只要这些字母属于同一序列,就可以使用for循环来递增计数。完成后,增加外部计数器(i)以获得下一个字母:



var countLetters = "aaabbccccddd";
var result = '';
var i = 0;

while (i < countLetters.length) {
  // iterate until current letter, and counted letter are not equal, increment count
  for (var count = 1; countLetters[i] === countLetters[i + count]; count++) {}

  // add current letter and count to string
  result += countLetters[i] + count;

  i += count; // increment outer counter - i
}

console.log(result);





另一种解决方案是使用String.match()和正则表达式来获取字母序列数组。然后maps每个序列以字母+计数,然后joins将它们返回到字符串:



var countLetters = "aaabbccccddd";

var result = countLetters.match(/(\w)\1+/g) // match sequences of the same letter
  .map((s) => s[0] + s.length) // map each sequence to letter with count
  .join(''); // join back to a string

console.log(result);

10-01 06:56
查看更多