【发布时间】:2013-11-25 19:12:48
【问题描述】:
我在尝试使用递归压缩字符串时遇到了一点问题。
例如,考虑以下字符串:
qwwwwwwweeeeerrtyyyyyqqqqwEErTTT
应用RLE算法后,这个字符串被转换成:
q9w5e2rt5y4qw2Er3T
在压缩后的字符串中,“9w”表示9个连续的小写“w”字符的序列。 “5e”表示连续5个小写“e”字符等
我已经有一个无需递归即可压缩它的代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Compress {
public static String input(String source) {
StringBuffer coding = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
int runLength = 1;
while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) {
runLength++;
i++;
}
if (runLength>1){
coding.append(runLength);
}
coding.append(source.charAt(i));
}
return coding.toString();
}
public static void main(String[] args) {
IO.outputStringAnswer("Enter a string");
String str = IO.readString();
String result = "";
result=input(str); //function(variable)
IO.outputStringAnswer(result);
}
}
但我不确定这是否能够变成它的递归版本。
【问题讨论】:
-
您当然可以制作它的递归版本,但这样做没有明显的好处。
-
哦,所以我得重写整个代码?我对这一切还很陌生,所以很遗憾,我还不太习惯用递归编写代码。
-
为什么要使用递归压缩字符串?我很难找到这样做的理由——至少在 Java 中是这样。
-
哦,这是我需要完成的作业的一部分,但直到现在我才真正在作业中使用过递归。我查看了一些示例,但似乎无法弄清楚如何让递归用于压缩。
-
作业是否为使用递归提供了任何指导或理由?这似乎是对递归的一种非常糟糕的使用。
标签: java regex algorithm recursion compression