具有特定大小写的字符串压缩



let string1 = "AAAAA"
Output: 4A1A
My output: 4A
let string2 = "AAAAAAAAABBBBBCCCCDD"
output : 4A4A1A4B1B4C2D
My output: 4A4A4B2B4C2D

如果某个特定字符的长度大于4,则重新从1开始计数。

我不能每次打印剩下的一个字符。请参考上面的例子:

这是我的代码。请尽量改进我的代码,而不是给出一个新的解决方案。

function stringCompress(str) {
let sum = 0;
let res = "" 
let demo = []
for(let i = 0; i < str.length;i++){
demo.push(i+"=" +str.substring(i,i+1))
if(str.substring(i,i+1) != str.substring(i+1,i+2) || sum == 4 ){
sum = sum+1
let temp = 0;
if(sum > 4){
sum = 4
temp = 1
}
res += sum+str.substring(i,i+1);   

if(temp == 1){
sum = temp
}else{
sum = 0;  
}


}
else{
sum = sum +1
}

}

return res
}
let d = "AAAAAAAAABBBBBCCCCDD"
console.log(stringCompress(d))

让我们简化一下。将字符串拆分为最多4个相等字符的块数组,随后使用Array.map将每个块的长度相加并连接结果。

console.log(compress("AAAAA"));
console.log(compress("AAAAAAAAABBBBBCCCCDD"));
function compress(str) {
let strings = [];
let chunk = '';
for (let i = 0; i < str.length; i += 1) {
// if [chunk] contains a character and its length is not 4 and 
// its first character equals the current character add 
// the current character to [chunk]
if (chunk.length > 0 && chunk.length < 4 && str[i] === chunk[0]) {
chunk += str[i];
} else {
// if [chunk] is not "", push it to [strings]
chunk.length && strings.push(chunk);
// reassign [chunk] using the current value
chunk = str[i];
}
}
// chunk may not be empty yet
if (chunk.length) {
strings.push(chunk);
}
// convert to string
return strings.map(v => `${v.length}${v[0]}`).join("")
}

如果加上

if (sum > 0) {
const last = str.slice(-sum);
res += last.length + last;
}

在代码中的循环之后(因此,在return ...之前),您的代码将按预期工作。

最新更新