输入一组形如AAABBBCCCC的字符串,使其输出结果能得到(A,3)(B,3)(C,4)。即相邻位数的字符被压缩。实现代码如下:
package test;
public class NumberCompression {
public StringBuffer numberCompression(String str){
//连续出现的个数,最少1个
int k = 1;
//储存返回值的buffer
StringBuffer res = new StringBuffer();
//储存分割后字符串的数组,这里大小加1是为了多插入一位补充字符
String arr[] = new String[str.length()+1];
//分割字符串
for(int i=0; i<str.length(); i++){
arr[i] = str.substring(i, i+1);
}
//插入一位补充字符
arr[str.length()] = "补";
//循环比较,为了避免数组越界,我们只能比length-1次,但这样的话就会丢失最后一位。所以我们
//在最后一位补充一个无用字符,将最后一位有效位提到倒数第二位。这样被吃掉的就是无用字符了。
for(int i=0; i<arr.length-1; i++){
if(arr[i].equals(arr[i+1])){//如果一样连续的位数加1
k++;
}else{//如果不一样就append一次,并且连续位数置1,为下一个字符比较做准备
res.append("("+arr[i]+","+String.valueOf(k)+")");
k=1;
}
}
//返回结果
return res;
}
public static void main(String args[]){
NumberCompression numCom = new NumberCompression();
StringBuffer res = numCom.numberCompression("AAAAABB");
System.out.println(res);
}
}
结果如下: