繁体   English   中英

特殊情况下的字符串压缩

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM