leetcode 443.压缩字符串

原题如下:

在这里插入图片描述

分析

/*
 *作者@v7fgg
 *执行用时 :9 ms, 在所有 Java 提交中击败了19.94%的用户
 *内存消耗 :39.7 MB, 在所有 Java 提交中击败了20.00%的用户
 *2020年6月1日 21:49
 */
class Solution {
    public int compress(char[] chars) {
        //注意此题需要在原数组改
        int l=chars.length;
        if(l<2){//数组长度为1的不用进行变换,变换反而会变长
            return l;
        }
        int ans=0;
        int count=1;//用于连续相同字符数量的计数
        int zhizhen=0;//代表改变原数组未知的索引
        for(int i=1;i<l;i++){
            if(chars[i]==chars[i-1]){
                count++;
            }
            else{//遇到前后字符不同,则要进行压缩,先插入原字符,再依次插入count所代表的数字拆分成的字符
                if(count<2){//数组长度为1的不用进行变换,
                    char c=chars[i-1];                   
                    chars[zhizhen]=c;                    
                    zhizhen++;
                    ans++;
                    //注意每在原数组改变一个值,就要在返回值ans加1,因为我们需要的是所有重新赋值过的数组前ans个值
                }
                else{
                    char c=chars[i-1];
                    chars[zhizhen]=c;
                    zhizhen++;
                    ans++;
                    String s=count+"";
                    for(int j=0;j<s.length();j++){
                        chars[zhizhen]=s.charAt(j);
                        zhizhen++;
                        ans++;
                    }count=1;
                }                
            }
            if(i==l-1){//当指针走到数组最后一位的时候,无论如何也要进行转换(count==1时例外,此时直接复制字符即可)
                if(count<2){                    
                    chars[zhizhen]=chars[i];  
                    ans++;           
                }
                else{
                    char c=chars[i-1];
                    chars[zhizhen]=c;
                    zhizhen++;
                    ans++;
                    String s=count+"";
                    for(int j=0;j<s.length();j++){
                        chars[zhizhen]=s.charAt(j);
                        zhizhen++;
                        ans++;
                    }
                }
            }
        }return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值