问题:
段位:4
说明:
BWT压缩算法,是先枚举所有字符串移位后,再对移位后的字符串集合排序得出后缀以及原始数组索引的压缩算法,题目要求实现一次压缩算法以及压缩解压算法。
题目连接:
Burrows-Wheeler-Transformation:https://www.codewars.com/kata/54ce4c6804fcc440a1000ecb/train/java
输入案例:
Input: "bananabar"
所有的移位字符串集合:
b a n a n a b a r
r b a n a n a b a
a r b a n a n a b
b a r b a n a n a
a b a r b a n a n
n a b a r b a n a
a n a b a r b a n
n a n a b a r b a
a n a n a b a r b
Then we sort that matrix by its rows. The output of the transformation then is the last column and the row index in which the original string is in:
对字符串进行排序后:
.-.
a b a r b a n a n
a n a b a r b a n
a n a n a b a r b
a r b a n a n a b
b a n a n a b a r <- 4
b a r b a n a n a
n a b a r b a n a
n a n a b a r b a
r b a n a n a b a
'-'
Output: ("nnbbraaaa", 4)
我的代码:
首先是编码:
因为文本越长,如果全部字符串列举出来是不可能的,所以
1、先获得所有移位的头字符,以及头字符对应的字符串索引,形成一个头字符集合
2、根据头字符集合进行排序,字符串排序就是根据 ASCII 码表,将每一个字符比较并排序
3、头字符集合排序好之后,按顺序拿集合中头字符对应的字符串索引,然后获取属于移位后最后一个的字符,并记录原始数组的索引。
import java.util.*;
public class BurrowsWheeler {
private static StringBuilder builder = new StringBuilder();
public static BWT encode(String s) {
builder.setLength(0);
int len = s.length(), index