我正在尝试为字符串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);