gpt4 book ai didi

javascript - 压缩字符串的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:46 25 4
gpt4 key购买 nike

我想编写一个函数来压缩字符串中的字符,例如 'bbbab' 将被转换为 'b3ab',但我被卡住了

它只打印“b3”

这是目前的代码

let string = 'bbbab';
let letters = string.split("");
let currentAlphabetLetter = letters[0];
let count = 0;
let newString = [];

string.split("").forEach(letter => {
if (letter === currentAlphabetLetter) {
count++;
} else {
if (count > 0) {
newString.push(`${currentAlphabetLetter}${count}`);
} else {
newString.push(`${letter}`);
}
count = 0;
currentAlphabetLetter = letter;
}
})


console.log(newString);

最佳答案

当您开始一个新字母时,您需要将count 设置为1,否则您不会计算该字符的第一次出现。

这在字符串的开头不是问题,因为您处理了第一个字母两次:您使用 let currentAlphabetLetter = letters[0]; 提取它,然后再次处理它forEach 的第一次迭代。要使字符串的开头与其他出现的地方相同,您应该遍历从第二个字符开始的子字符串。

而不是推送到一个数组,你应该附加到一个字符串。

count1 时,您需要附加 currentAlphabetLetter,而不是 letter

let string = 'bbbab';
let letters = string.split("");
let currentAlphabetLetter = letters[0];
let count = 1;
let newString = "";

string.substr(1).split("").forEach(letter => {
if (letter === currentAlphabetLetter) {
count++;
} else {
if (count > 1) {
newString += `${currentAlphabetLetter}${count}`;
} else {
newString += `${currentAlphabetLetter}`;
}
count = 1;
currentAlphabetLetter = letter;
}
});

// Process the last letter
if (count > 1) {
newString += `${currentAlphabetLetter}${count}`;
} else {
newString += `${currentAlphabetLetter}`;
}

console.log(newString);

关于javascript - 压缩字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53196278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com