欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 443.压缩字符串

程序员文章站 2022-07-01 17:09:05
...

原题如下:

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;
    }
}