leetCode压缩字符串

题目:

   给你一个字符数组 chars ,请使用下述算法压缩:

   从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :

  • 如果这一组长度为 1 ,则将字符追加到 s 中。
  • 否则,需要向 s 追加字符,后跟这一组的长度。

压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。

解题思路:

        字符串: aaabbbcccddd, 此时我们的解题思路是,通过循环进行遍历,遍历中如果前一个字母和当前位置遍历的字母不相同,我们将前一个字母加入到字符串中,如果前一个字母和后一个字母相同我们将其计数加1最后输出结果即为我们所需要的字符串。

需要的变量: 

        输出结果的字符串 temp

        两个指针 i,j 用来判断前后两个字母是否相同。

        计数变量 count                

public class Test{
    public static void main(String[] args){
        
    }
    public static String test(String str){
        String temp = ""; // 存储新字符串的数组
        if(str=="") return temp; // 如果我们传进来的字符串为空那么直接结束
        // 通过循环进行遍历
        int count = 1; // 用来计数 重复的字母
        for(int i=0; i<str.length();i++){
            int j = i-1; // 第二个指针
            if(str.charAt(i)!=str.chartAt(j)){
                str+=str.charAt(j)+""+count;
                count=1; // 将其重置为1
            }else{
                count++;
            }
        }
        // 这里是个坑,假如我们直接跳出循环的话直接输出字符串则会出现最后一段相同的字母没有被记录
        // 所以我们需要将最后一个字母加到字符串上,然后进行输出。
        str+=str.charAt(str.length-1)+""+count; // 这里我们区最后一个字母。
        return temp;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值