不确定为什么我的代码不起作用。如果我输入qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT
,我应该qw9w5e2ry5y4qE2ET3T
获得q9w5e2rt5y4qw2Er3T
。
行程编码(RLE)是一种简单的压缩算法" (一种算法,它采用一个数据块并减小其大小,生成一个在较小空间中包含相同信息的块)。它的工作原理是用短的标记替换相同数据项的重复序列"代表整个序列。将RLE应用于字符串涉及在字符串中查找重复相同字符的序列。每个这样的序列都应该被一个"令牌"包括:
序列中的字符数 重复的角色 如果一个角色没有重复,则应该单独留下。
例如,请考虑以下字符串:
qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT
应用RLE算法后,此字符串将转换为:
q9w5e2rt5y4qw2Er3T
在压缩字符串中,"9w"
表示9个连续小写"w"
字符的序列。 "5e"
代表5个连续的小写"e"
字符等。
编写一个以字符串作为输入的程序,使用RLE压缩它,并输出压缩的字符串。大小写 - 大写和小写字符应视为不同。您可以假设输入字符串中没有数字字符。输入没有其他限制 - 它可能包含空格或标点符号。没有必要将非字母字符与字母区别对待。
public class Compress{
public static void main(String[] args){
System.out.println("Enter a string: ");
String str = IO.readString();
int count = 0;
String result = "";
for (int i=1; i<=str.length(); i++) {
char a = str.charAt(i-1);
count = 1;
if (i-2 >= 0) {
while (i<=str.length() && str.charAt(i-1) == str.charAt(i-2)) {
count++;
i++;
}
}
if (count==1) {
result = result.concat(Character.toString(a));
}
else {
result = result.concat(Integer.toString(count).concat(Character.toString(a)));
}
}
IO.outputStringAnswer(result);
}
}
答案 0 :(得分:0)
我会从零开始,并期待:
public static void main(String[] args){
System.out.println("Enter a string: ");
String str = IO.readString();
int count = 0;
String result = "";
for (int i=0; i < str.length(); i++) {
char a = str.charAt(i);
count = 1;
while (i + 1 < str.length() && str.charAt(i) == str.charAt(i+1)) {
count++;
i++;
}
if (count == 1) {
result = result.concat(Character.toString(a));
} else {
result = result.concat(Integer.toString(count).concat(Character.toString(a)));
}
}
IO.outputStringAnswer(result);
}
一些输出:
qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT => q9w5e2rt5y4qw2Er3T
qqwwwwwwwweeeeerrtyyyyyqqqqwEErTTT => 2q8w5e2rt5y4qw2Er3T
qqwwwwwwwweeeeerrtyyyyyqqqqwEErTXZ => 2q8w5e2rt5y4qw2ErTXZ
aaa => 3a
abc => abc
a => a