当前位置:网站首页>LeetCode_443_压缩字符串
LeetCode_443_压缩字符串
2022-08-10 10:43:00 【Fitz1318】
题目链接
题目描述
给你一个字符数组 chars ,请使用下述算法压缩:
从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :
- 如果这一组长度为
1,则将字符追加到s中。 - 否则,需要向
s追加字符,后跟这一组的长度。
压缩后得到的字符串 s不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 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 <= 2000chars[i]可以是小写英文字母、大写英文字母、数字或符号
解题思路
双指针法
left,right分别为窗口的边界- 每当
right移动到某一段连续相同子串的最右侧时,我们就在left处依次写入该字符串对应的字符和子串长度即可- 如果重复子串长度为1,那么
left++即可 - 如果重复子串长度在[2,9],那么
chars[left + 1] = (char) (num + '0');,并且left += 2 - 如果重复子串长度在[10,无穷],那么就将长度转换成String,在遍历加入String.
chars[left + 1 + i] = nums.charAt(i);。并且left += nums.length + 1
- 如果重复子串长度为1,那么
AC代码
class Solution {
public int compress(char[] chars) {
int left = 0;
int right = 0;
while (right < chars.length) {
int index = right;
while (right < chars.length && chars[index] == chars[right]) {
right++;
}
int num = right - index;
chars[left] = chars[right - 1];
if (num == 1) {
left++;
} else if (num <= 9) {
chars[left + 1] = (char) (num + '0');
left += 2;
} else {
String nums = num + "";
for (int i = 0; i < nums.length(); i++) {
chars[left + 1 + i] = nums.charAt(i);
}
left += nums.length() + 1;
}
}
return left;
}
}
边栏推荐
- getParameter()与 getAttribute()的用法与区别
- 【FAQ】【Push Kit】 华为怎么设置角标
- Dialogue with Chen Ciliang: Nezha wants to popularize high-end products
- database constraints
- YTU 2894: G--我要去内蒙古大草原
- HCIP ---- VLAN
- 3 injured in 'electrical accident' at Google data center
- Dry goods!ASSANet: Making PointNet++ faster and stronger
- [Microservice Architecture] Microservices and SOA Architecture (2)
- POJ 2891 Strange Way to Express Integers (扩展欧几里得)
猜你喜欢

组合模式:Swift 实现

Redis(三)——配置文件详解、发布和订阅、新数据类型

3 injured in 'electrical accident' at Google data center

Dialogue with Chen Ciliang: Nezha wants to popularize high-end products

C#实战:基于ItextSharp技术标签生成小工具

mysql出现:ERROR 1524 (HY000): Plugin ‘123‘ is not loaded

"MySQL Advanced Chapter" 6. Principles of index creation and design

金九银十跳槽旺季:阿里、百度、京东、美团等技术面试题及答案

「时序数据库」使用cassandra进行时间序列数据扫描

Memory problems difficult to locate, it is because you do not use ASAN
随机推荐
The impact of development mode on testing
what is rtems
From the product dimension, why can't we fully trust Layer2?
关于json转换器缺失的问题,报错内容:No converter found for return value of type
第3章-线性方程组(3)
Situation丨The intrusion of hackers intensifies, and the shooting range sets up a "defense shield" for network security
Weilai-software development engineer side record
YTU 2894: G--我要去内蒙古大草原
阻塞 非阻塞 poll机制 异步
Redis(六)——Redis6的事务和锁机制(未完成,待补)
金九银十跳槽旺季:阿里、百度、京东、美团等技术面试题及答案
组合模式:Swift 实现
【无标题】
第2章-矩阵及其运算-矩阵创建(1)
mysql出现:ERROR 1524 (HY000): Plugin ‘123‘ is not loaded
mysql appears: ERROR 1524 (HY000): Plugin '123' is not loaded
Will SQL and NoSQL eventually converge?
文本选中圆角样式border-radius
【勇敢饭饭,不怕刷题之链表】链表反转的几种情况
How can an organization judge the success of data governance?