アルゴリズムの質問: RLE 圧縮アルゴリズムの Java 実装 (ランレングス コーディング)

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

おすすめ

転載: blog.csdn.net/wudexiaoade2008/article/details/105613929