443. String Compression #
题目 #
- 给你一个字符数组
chars
,请使用下述算法压缩: - 从一个空字符串
s
开始。对于chars
中的每组 连续重复字符 :- 如果这一组长度为
1
,则将字符追加到s
中。 - 否则,需要向
s
追加字符,后跟这一组的长度。
- 如果这一组长度为
- 压缩后得到的字符串
s
不应该直接返回 ,需要转储到字符数组chars
中。需要注意的是,如果组长度为10
或10
以上,则在chars
数组中会被拆分为多个字符。 - 请在 修改完输入数组后 ,返回该数组的新长度。
- 你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
思路 #
模拟 #
代码 #
模拟 #
class Solution {
public int compress(char[] chars) {
int ans = 0;
char cur = chars[0];
int cnt = 0, ptr = 0;
for (char ch: chars) {
if (ch == cur) cnt++;
else {
chars[ptr++] = cur;
ans++;
if (cnt > 1) {
char[] arr = String.valueOf(cnt).toCharArray();
for (char c: arr) chars[ptr++] = c;
ans += arr.length;
}
cur = ch;
cnt = 1;
}
}
chars[ptr++] = cur;
ans++;
if (cnt > 1) {
char[] arr = String.valueOf(cnt).toCharArray();
for (char c: arr) chars[ptr++] = c;
ans += arr.length;
}
return ans;
}
}