行程长度压缩法即根据字符串的连续重复字符进行编码的一种方法,例如:
"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;
}
}