[英]String Compression with a particular case
例子是
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...
之前),您的代码将按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.