我正在尝试制作一种压缩字符串的方法。例如,该方法将采用“ ttttesst”并返回“ 4te2st”。
当我运行该方法并打印结果时,我得到:“”
public class Compress {
public static String compress(String original){
int count = 1;
int oglength = original.length()-1;
StringBuilder newword = new StringBuilder("");
for(int i = 0; i < oglength; i = i+count){
count = 1;
for(int k = 1; k < oglength-k-i; k++){
if(original.charAt(i) == original.charAt(i+k)){
count++;
continue;
} else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) > 1){
newword.append(newword);
newword.append(count);
newword.append(original.charAt(i));
break;
} else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) == 1){
newword.append(newword);
newword.append(original.charAt(i));
count++;
break;
}
}
}
String returnword = newword.toString();
return returnword;
}
答案 0 :(得分:0)
在重复使用增量索引的情况下,Compress方法不添加任何内容。
以下是根据您的方法提供的有效版本:
public static String compress(String original) {
int count;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < original.length(); i = i + count) {
count = 1;
for (int k = i + 1; k < original.length(); k++) {
if (original.charAt(i) == original.charAt(k)) {
count++;
} else {
break;
}
}
if (count > 1) {
builder.append(count).append(original.charAt(i));
} else {
builder.append(original.charAt(i));
}
}
return builder.toString();
}
答案 1 :(得分:0)
我认为您对程序感到困惑,因为unnnecessary loops
会增加复杂性,而if-else ladder
会比较您无法记住的字符(这是{{1 }}可能会对您有帮助)。
我不明白您要尝试使用哪种用例,但是如果您确实想要上面提到的内容,那么下面的代码片段将为您解决。
debugging
我只考虑了基本情况。对于大量的测试用例,可能只需要进行一些小的改动即可。
Note:
您还可以参考以下链接, Count number of occurrence of characters和HashMap Implementation和Hashing used for counting occurrence of character,以更好地理解如何解决此类问题。
我希望这会有所帮助!