行程长度压缩算法(Run Length Encoding)

行程长度压缩法即根据字符串的连续重复字符进行编码的一种方法,例如:

"aaaaaaabbccccdefffffffgg"

输出结果为:

"a7b2c4d1e1f7g2"

很显然这种方法如果处理连续重复字符串的效果较佳,最差的情况就是没有连续的字符,这样的话除了没有压缩不算,而且还增加了字符串的长度,例如:

"abcdefgh"

压缩结果:

"a1b1c1d1e1f1g1h1"

所以应用次方法要注意场景。该压缩法的代码实现本身不是很难,只要做好前后字符对比,并对连续相同字符计数即可,可在时间复杂度 O(n) 内完成:

public class RunLengthEncoding {
    public static String encoding(String str){
        if (str == null)
            return null;
        if (str.length() <= 1)
            return str;

        StringBuilder sb = new StringBuilder("");

        char pre_c = str.charAt(0);
        int cnt = 1;
        for (int i = 1; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == pre_c) {
                cnt++;
                continue;
            } else {
                sb.append(String.valueOf(cnt));
                sb.append(c);
                cnt = 1;
                pre_c = c;
            }
        }
        sb.append(String.valueOf(cnt));


        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(encoding("wwwwaaadexxxxxx"));
        return;
    }
}
    原文作者:游程编码问题
    原文地址: https://blog.csdn.net/sinat_36246371/article/details/70053417
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞