随笔-压缩字符串

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/84927381

问题:给定一组字符,使用原地算法将其压缩。

压缩后的长度必须始终小于或等于原数组长度。

数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。

在完成原地修改输入数组后,返回数组的新长度。

进阶:
你能否仅使用O(1) 空间解决问题?

思路:要注意的是chars最后是什么,是和前一位不一样的还是一样的; 具体下面代码有标注,o(1)解法暂未能实现,如有不同思路,欢迎留言;

class Solution {
    public int compress(char[] chars) {
  int i=0;
        int j=1;
        int n=1;
        StringBuffer sb=new StringBuffer();
        while(j<chars.length){
            if(chars[i]==chars[j]&& j==chars.length-1){ //j 走到最后并且i!=chars.length-2
                sb.append( chars[i]);
                if(n!=1){
                    sb.append(n+1);
                }else{
                    sb.append(n);
                }
                break;
            }
            if(chars[i]!=chars[j] ){ //
                sb.append( chars[i]);

                if(n!=1){
                    sb.append(n);
                }
                n=1;
                i=j;
                j++;
                if(j==chars.length){ // 最后一位只有一个的情况
                    sb.append( chars[i]);
                    break;
                }
                continue;
            }
            if(chars[i]==chars[j]){
                n++;
                j++;
            }
        }
        System.out.println(sb);
        return sb.length();
    }
}

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/84927381
今日推荐