题目:
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于10000),
保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例
"aabcccccaaa"返回:"a2b1c5a3"
思路:
StringBuilder的用法
package 字符串问题;
public class case05_字符串压缩 {
public static void main(String[] args) {
String res=zipString("aaaccbbbbb");
System.out.println(res);
}
private static String zipString(String scr) {
int n=scr.length();
int last=0;//记录上一个字符
int count=0;
StringBuilder sb=new StringBuilder();//用来记录压缩后的字符串
for(int i=0;i<n;i++){
char c=scr.charAt(i);
if(sb.length()==0){
sb.append(c);//处理第一个字符
count++;
}else{
if(last==c){
count++;//和上一个字符相同
}else{
sb.append(count).append(c);
count=1;//count重置为1,当前字符
}
}
last=c;
}
//考虑最后一个字符
if(count>=1){
sb.append(count);
}
//比较新字符串和原字符串的长度
if (sb.length() > scr.length()) {
return scr;
}
return sb.toString();
}
}