题目描述:输入字符串只包含 a-z 字母以及结束标志,请编写函数实现对连续出现的相同字符进行压缩。
例如:"xxxyyyyz" 压缩后字符串为 "3x4yz","yyyyyyy" 压缩后为 "7y"。
StringBuilder 用来构造一个没有字符的字符串。通过 append()方法写入数据。
思路:遍历字符串,定义计数器 count ,当字符相同时计数,直到出现不同字符写入相应数据。一直用前一个字符和后一个字符进行比较,那么就要考虑溢出问题,所以我设置的遍历字符串是从 0 到 倒数第二个字符,对最后一个字符要单独进行判断。
当遍历退出时,此时的 i 代表最后一个字符,若 i 和 i - 1 位置的字符相同,则存入该字符重复次数以及该字符。若不同,存入该字符。
public class Compress {
public static String compress(String s){
StringBuilder ret = new StringBuilder();
int count = 1;
int i = 0;
for( i = 0;i < s.length() - 1;i++){
if(s.charAt(i) == s.charAt(i + 1)){
count++;
continue;
}else{
if(count == 1){
ret.append(s.charAt(i));
}else{
ret.append(count);
ret.append(s.charAt(i));
}
}
count = 1;
}
if(s.charAt(i) != s.charAt(i - 1)){
ret.append(s.charAt(i));
}else{
ret.append(count);
ret.append(s.charAt(i));
}
return ret.toString();
}
public static void main(String[] args) {
String s = "xxxyyyyz";
System.out.println(compress(s));
}
}