[英]Compression String does not work for all strings
这个想法是完成 function 并生成给定字符串的压缩形式。 一个例子是如果给定的字符串是aabbcc
那么你会得到a2b2c2
我创建的代码的问题是由于某种原因,它不能立即处理任何结尾连续或连续字母的内容。 wwww
变成w4
但aa
不会变成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.