443.压缩字符串

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

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

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

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

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

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

解题思路:双指针。每次当读指针 read 移动到某一段连续相同子串的最右侧,我们就在写指针 write 处依次写入该子串对应的字符和子串长度即可。

在实际代码中,当读指针 read 位于字符串的末尾,或读指针 read 指向的字符不同于下一个字符时,我们就认为读指针 read 位于某一段连续相同子串的最右侧。该子串对应的字符即为读指针 read 指向的字符串。我们使用变量 left 记录该子串的最左侧的位置,这样子串长度即为 read−left+1。

特别地,为了达到 O(1) 空间复杂度,我们需要自行实现将数字转化为字符串写入到原字符串的功能。这里我们采用短除法将子串长度倒序写入原字符串中,然后再将其反转即可。

class Solution{public int compress(char[] chars){int n=chars.length;int write=0,left=0;for(int read=0;read<n;read++){if(read==n-1||chars[read]!=chars[read+1]){chars[write++]=chars[read];int num=read-left+1;if(num>1){int anchor=write;while(num>0){chars[write++]=(char)(num%10+'0');num /=10;                    } reverse(chars,anchor,write-1);               }            left=read+1;}        }return write;    }public void reverse(char[]chars,int left,int right){while(left<right){char temp=chars[left];chars[left]=chars[right];chars[right]=temp;left++;right--;        }    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/534929.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组态软件与西门子S7系列PLC及三菱PLC间的无线通信测试

组态软件与西门子S7系列PLC及三菱PLC间的无线通信测试需要用到以下设备&#xff1a; l 西门子PLC型号&#xff1a;S7-200Smart 2台 l 三菱PLC型号&#xff1a;FX5U 2台 l 上位机&#xff1a;力控V7.1 1台 l 无线通讯终端&#xff08;网口版&#xff09;——DTD418MB 3块…

1688商品详情数据采集(商品属性,规格,价格,详情图等)

京东商品详情数据采集是一个复杂但重要的过程&#xff0c;它涉及获取商品的详细信息&#xff0c;包括商品属性、规格、价格以及详情图等。以下是关于如何进行京东商品详情数据采集的基本步骤&#xff1a; 确定采集目标&#xff1a;首先&#xff0c;你需要明确需要采集的商品信…

Python使用openpyxl库或pandas库创建.xlsx格式的Excel文件,并向文件不同的sheet按行或按列写入内容

import openpyxl# 创建-一个Workbook对象 wb openpyxl.Workbook()# 创建多个工作表 sheet1 wb.active sheet1.title "s1"sheet2 wb.create_sheet("s2")# 在不同的工作表中写入数据 sheet1["A1"] Data for Sheet1 sheet1["A2"] D…

一键美化ppt的ai工具有哪些?推荐5款自动生成PPT的ai软件!

伴随着 ai 人工智能技术的发展&#xff0c;作为普通个体的我们&#xff0c;也有机会享受到技术发展带来的红利&#xff0c;比如用 ai 来润色文章&#xff0c;用 ai 来美化 ppt 演示文稿&#xff0c;用 ai 辅助进行数据分析等等&#xff0c;ai 的应用场景多种多样&#xff0c;使…

福利来啦!运维必备神器 90天超长试用!

如何提升客户服务体验&#xff0c;提高企业核心竞争力&#xff1f;福利来啦&#xff01; LinkSLA智能运维管家提供90天超长试用&#xff0c;体验全方位服务管理能力与SaaS服务模式&#xff0c;低成本、易部署、灵活开发的智能运维管理平台&#xff0c;智能工单系统、可视化报表…

运行springboot项目提示:java: 错误: 不支持发行版本 18、java: 错误: 无效的源发行版:18

java: 错误: 不支持发行版本 18 解决方法&#xff1a;修改字节码版本&#xff0c;可以多试几次。 java: 错误: 无效的源发行版&#xff1a;18 解决方法&#xff1a; 出现这些错误原因&#xff1a; spring版本与jdk版本不对应 我的spring boot版本是3.2.2&#xff0c;对应的j…

移除元素

文章目录 移除元素删除有序数组中的重复项移动零比较含退格的字符串有序数组的平方 移除元素 双指针 删除指定项且不改变顺序 def removeElement(nums: list[int], val: int) -> int:fast slow 0while fast < len(nums):if nums[fast] ! val:nums[slow] nums[fast]sl…

云桌面是什么?

近年来互联网技术的发展速度越来越快&#xff0c;很多先进的计算机技术和信息技术随之涌现出来。使计算机的应用水平得到显著提高。一般而言&#xff0c;人们会根据自身的最大需求选择物理主机&#xff0c;因此很多原本不需要购买的物理设备在实际应用中存在被忽视的情况&#…

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网&#xff1a;https://nacos.io/ GitHub&#xff1a;https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目&#xff0c;它主要是一个更易于构建云原生应用的动态服务发现…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

抖店新手如何入驻?需要什么资质?看看这个你就明白了!

我是电商珠珠 新的一年来到&#xff0c;又有一批想要靠自己打拼的抖店新手想要入驻&#xff0c;今天我就来跟大家讲讲抖店入驻需要什么资料以及入驻流程。 入驻资质 商家需要准备一张个体工营业执照&#xff0c;再准备个人的身份证、银行卡、抖音号。 按照抖店最高缴纳保证…

centos命令history设置记录10000行

今天在操作服务器的时候&#xff0c;用history查看操作记录的时候&#xff0c;发现只能查看10条&#xff0c;这样不行啊&#xff0c;我想查看所有人对服务器操作的命令。 [rootbogon ~]# history解决办法&#xff1a; #1、找到/etc/profile文件中的histsize 把10改成10000 […