繁体   English   中英

压缩字符串不适用于所有字符串

[英]Compression String does not work for all strings

这个想法是完成 function 并生成给定字符串的压缩形式。 一个例子是如果给定的字符串是aabbcc那么你会得到a2b2c2

我创建的代码的问题是由于某种原因,它不能立即处理任何结尾连续或连续字母的内容。 wwww变成w4aa不会变成a2并且wuenuneubgnjfniwfibwiebfaaa不会变成wuenuneubgnjfniwfibwiebfa3

function compressedString(message) {
  let out = '';
  let count = 1;

  for (let i = 0; i < message.length; i++) {
    let current = message[i];
    let next = message[i + 1];
    if (current == next) {
      count++;
    } else {
      out += current + String(count);
      count = 1;
    }
  }
}

我使用您的问题wuenuneubgnjfniwfibwiebfaaa的给定示例测试您的算法, output 是w1u1e1n1u1n1e1u1b1g1n1j1f1n1i1w1f1i1b1w1i1e1b1f1a3 ,这对于字符串压缩要求来说听起来很奇怪。 当我在for循环中添加一个嵌套条件 inner first else时,我得到了正确的结果,请查看下面的代码,让您有什么想法:

 function compressedString(message) {
  let out = '';
  let count = 1;

  for (let i = 0; i < message.length; i++) {
    let current = message[i];
    let next = message[i + 1];
    if (current == next) {
      count++;
    } else {
      if(count == 1){
        out += current;
      }else{
        out += current + String(count);
      }
      count = 1;
    }
  }
 return out;
}

你的问题是你最终处理它的方式。 当循环在最后一次迭代时,变量next会发生什么? 您需要在if上添加额外的检查。

尝试这个:

function compressedString(message) {
  let out = '';
  let count = 1;
  
  for (var i = 0; i < message.length; i++){
    let current = message[i];
    let next = message[i + 1];
    if ( i < message.length-1 && message[i] == next) {
      count += 1;
    } else {
      out += current + String(count);
      count = 1; 
    }
  }
  return out;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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