443. 压缩字符串
方法:双指针
wire: 记录写的地方
read: 记录读的位置
left:读取的字符串最左边的位置,代表第一个字符
获取重复的字符串长度后,取余放入数组中,此时字符串长度是倒置的,需要反转后重新放入数组
注意,所有操作都在原数组中完成,不开辟额外的空间
public class Solution443 {
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--;
}
}
}