2015-11-01 29 views
3

我有一个RLE压缩算法下面的Java代码:RLE压缩

public static String compress (String original) { 
    String compressed = ""; 
    char letter = 0; 
    int count = 1; 
    for (int i = 0; i < original.length(); i++) { 
     if (letter == original.charAt(i)) { 
      count = count + 1; 
     } 
     else { 
      compressed = compressed + letter; 
      if(count != 1) { 
       compressed = compressed + count; 
      } 
      letter = original.charAt(i); 
      count = 1; 
     } 
    } 
    compressed = compressed + letter; 
    if(count != 1) { 
     compressed = compressed + count; 
    } 
    return compressed; 
} 

如果输入是aaaawwwweerrr

输出应该是:3a4w2e3r

实际的输出是:a3w4e2r3

我试过切换

compressed = compressed + count 

compressed = count + compressed 

,但是当我这样做,输出:244 awer3

我应该如何修改代码以使输出处于适当的顺序?

+0

你改变,这两个发生? – usr2564301

+0

else语句中的if语句 – Hamon148

回答

2
if(count != 1){ 
    compressed = compressed + count; 
} 
compressed = compressed + letter; 

首先追加count然后letter

这个你需要在两个地方完成,第一个inside the loop和第二个after the loop完成最后一个字符。

我建议你使用StringBuilder.append()而不是String串联。

public static String compress (String original) { 
    StringBuilder compressed = new StringBuilder(); 
    char letter = 0; 
    int count = 1; 
    for (int i = 0; i < original.length(); i++) { 
    if (letter == original.charAt(i)) { 
     count = count + 1; 
    } 
    else { 
     compressed = count !=1 ? compressed.append(count) : compressed; 
     compressed.append(letter); 
     letter = original.charAt(i); 
     count = 1; 
    } 
    } 

    compressed = count !=1 ? compressed.append(count) : compressed; 
    compressed.append(letter); 
    return compressed.toString(); 
} 

Input : aaaawwwweerrr 
Output: 4a4w2e3r