【问题标题】:String Compression with a particular case特殊情况下的字符串压缩
【发布时间】:2021-02-04 14:54:45
【问题描述】:

例子是

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))

【问题讨论】:

    标签: javascript string compression substring


    【解决方案1】:

    让我们简化一下。将字符串拆分为最多 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 ... 之前),您的代码将按预期工作。

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2014-09-30
      • 2019-11-20
      相关资源
      最近更新 更多