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

来源:互联网 发布:eve for mac 编辑:程序博客网 时间:2024/05/21 10:53

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

"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;    }}
0 0