字符串压缩

题目描述:输入字符串只包含 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));
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值