443_压缩字符串
小于 1 分钟
443_压缩字符串中等
解题思路:
- 双指针(快慢指针)
class Solution {
public static int compress(char[] chars) {
int res = 0;
int left = 0;
int right = 1;
int index = 0; // 修改数组
for (; right < chars.length; right++,left++) {
char leftChar = chars[left];
char rightChar = chars[right];
// left 与 right 不相等
if(leftChar != rightChar){
res++; // 字符站一位
chars[index++] = chars[left];
if(right - left != 1) { // 统计到多个
String temp = String.valueOf(right - left);
for (int i = 0; i < temp.length(); i++) {
chars[index++] = temp.charAt(i);
res++;
}
}
left = right -1; // 移动 left
// left 与 right相等
} else{
// right 右移, left 不动
left--;
}
}
// 最后越界的一次情况
if(left == chars.length - 1){
// left 是不同字符
res++;
chars[index] = chars[left];
}
else {
res++;
chars[index++] = chars[left];
String temp = String.valueOf(right - left);
for (int i = 0; i < temp.length(); i++) {
chars[index++] = temp.charAt(i);
res++;
}
}
return res;
}
}
Powered by Waline v2.15.5