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)

大家都在看

  • 符号转义解决SSH远程命令执行的问题

    场景:服务器 A B C D 上存在一些日志,日志中的每行包含了日期、日志级别、日志信息等。现在要求从跳板机 X 获取这四台服务器上的数据,并通过规则(如日期)筛选,汇总到一个文件…

    Linux 2023年6月14日
    098
  • docker 启动mysql

    创建配置文件 mysqld.cnf Original: https://www.cnblogs.com/outsrkem/p/15704614.htmlAuthor: Outsrk…

    Linux 2023年6月6日
    075
  • Lab

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Skybiubiu/p/15876295.htmlAut…

    Linux 2023年6月13日
    075
  • zabbix部署

    zabbix zabbix zabbix介绍 zabbix特点 zabbix部署 zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开…

    Linux 2023年6月13日
    0143
  • 高等代数:4 矩阵的运算

    4 矩阵的运算 1、数域K上两个矩阵称为 相等,如果它们的行数相等,列数也相等,并且它们的所有元素对应相等。 2、定义1:设(A=(a_{ij}),B=(b_{ij}))都是数域K…

    Linux 2023年6月8日
    0101
  • 02-MySQL关键字、Select语句执行顺序

    SQL关键字 1、分页 MySQL的分页关键词是 limit SELECT * FROM student LIMIT 2,6:查询学生表中的数据,从第三条开始,显示6条数据 2、分…

    Linux 2023年6月7日
    091
  • 使用Navicat远程连接Oracle报错ORA-28547问题解决

    用Navicat连接Oracle数据库时出现如下错误: 按照数据库连接信息去连接就好了,注意的是默认的Server Name是ORCL,记得改成你要连接的数据库名; 在进行连接测试…

    Linux 2023年6月13日
    0122
  • 《深度工作:如何有效使用每一点脑力》读后感

    空闲时间阅读了一下《深度工作:如何有效使用每一点脑力》,作为一个沉迷网络的人,已经很难有聚精会神的时候,所以阅读此书,记录一下读后感,争取应用到生活当中。全书分为两个方面进行说明:…

    Linux 2023年6月7日
    098
  • Docker常用命令

    配置相关 docker version 查看版本 docker ps 查看当前运行的container docker exec -it php-fpm bash 进入cantain…

    Linux 2023年6月13日
    085
  • 北京思特奇2023年校招笔试(Java)

    北京思特奇2023年校招笔试(Java) 1、表达式 (short)10/10.2*2 运算后结果是什么类型? 答案:double,浮点数默认是double,自动类型向上转换为浮点…

    Linux 2023年6月14日
    0100
  • shell之常用的一些命令2

    前言 自我感觉学习shell要常用man,–help这样挺方便去写的,光靠熟练远远不够的 bash;gutter:false;</p> <h1>!/bin…

    Linux 2023年6月8日
    086
  • Polly服务治理(简单使用)

    一、服务治理说明 1、重试(Retry) 2、断路器(熔断)(Circuit-Breaker) 3、超时检测(TimeOut) 4、缓存(Cache) 5、降级(Fallback)…

    Linux 2023年6月14日
    077
  • Linux ARMv7中断向量表搬移(2)【转】

    经历过kernel的汇编阶段,进入C语言start_kernel后对中断向量表的位置进行搬移,搬移函数是early_trap_init。 early_trap_init函数的调用流…

    Linux 2023年6月8日
    0107
  • vsftpd 操作手册-完整版

    vsftpd 目录 – ftp 简介 – vsftpd 简介 – vsftpd 安装&卸载 – vsftpd 配置文件 – vsftpd 认证模板 – vsftpd 配置模…

    Linux 2023年6月13日
    088
  • docker与kubectl 命令自动补齐

    安装自动补齐需要依赖工具 docker命令补齐: 执行下列命令 kubectl命令补齐: Original: https://www.cnblogs.com/qianyuliang…

    Linux 2023年6月8日
    080
  • Docker 打包部署web项目 [Dockerfile方式]

    系统环境 IDE: IDEA 2020.2 Linux: WSL2 Ubuntu 20.04 Docker: 20.10.8 参考资料 博客园: Dockerfile常用指令介绍 …

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