RLEの正式名は、ランレングス エンコーディング (ランレングス エンコーディング)、または長さエンコーディング、可変長エンコーディング(ラン エンコーディング)とも呼ばれます。たとえば、文字列「」を入力します。うわぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ"、圧縮後の出力は次のようになります"1q2w3e4r5t以下は、
それぞれ Java 再帰と末尾再帰を使用して実装されています。
- 再帰的に実装される
public static String RLECompress(String source) {
if (source.length() <= 1) return source;
int runLength = 1;
while (runLength < source.length() && source.charAt(0) == source.charAt(runLength)) {
runLength++;
}
return runLength + source.substring(0, 1) + RLECompress(source.substring(runLength));
}
- 末尾再帰実装
public static String RLECompressWithTail(String source, String result) {
if (source.length() <= 0) return result;
int runLength = 1;
while (runLength < source.length() && source.charAt(0) == source.charAt(runLength)) {
runLength++;
}
result += runLength + source.substring(0, 1);
return RLECompressWithTail(source.substring(runLength), result);
}
参考
//http://www.6tie.net/p/908340.html