public class StringZip {
// 实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
//压缩
static String stringZip(char[] inputStr) {
String stringZip = "";
int sum = 1;
int i = 0, j = i + 1, len = inputStr.length;
while (/* i < len && */j < len) {
if (inputStr[i] == inputStr[j]) {
sum++;
} else {
stringZip += inputStr[i];
if (sum != 1) {
stringZip += sum;
}
sum = 1;
}
if (j == len - 1) {
stringZip += inputStr[len - 1];
if (sum != 1) {
stringZip += sum;
}
}
i++;
j = i + 1;
}
return stringZip.trim();
}
public static void main(String[] args) {
String str = "EAAAERRFFFBBB";
//EA3ER2F3B3
// str ="AESFASS";
System.err.println(stringZip(str.toCharArray()));
System.err.println(stringUnzip(stringZip(str.toCharArray()).toCharArray()));
}
//解压
static String stringUnzip(char[] inputStr){
String stringUnzip = "";
int i = 0,len = inputStr.length;
while(i<len-1){
if(Character.isDigit(inputStr[i+1])){
int count = Integer.parseInt(inputStr[i+1]+"");
for(int s =0; s< count ;s++){
stringUnzip +=inputStr[i];
}
i=i+2;
}else{
stringUnzip+=inputStr[i];
i++;
}
if(i >= len-1){
if(!Character.isDigit(inputStr[len-1])){
stringUnzip += inputStr[len-1];
}
}
}
return stringUnzip;
}
}
实现简易字符串压缩算法
最新推荐文章于 2024-02-03 13:37:48 发布