1
Given an array of characters, compress it in-place.

应该说,有点难想

  1. 遍历一遍,每次新的char都用cur标记是当前的char
  2. 内部的while是因为i++之后可能越界
  3. 单独的res, 作为结果的同时,也是“双指针”的实现的一部分
  4. 从前部分开始in-place修改chars没有问题, 因为compress之后肯定变短了,所以遍历的同时修改前面走过的部分没有关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int compress(char[] chars) {
int res = 0, i = 0, len = chars.length;
while (i < len) {
int count = 0;
char cur = chars[i]; // THE char
while (i < len && cur == chars[i]) {
count++; i++;
}
chars[res++] = cur;

if (count != 1) {
for (char c : Integer.toString(count).toCharArray()) {
chars[res++] = c;
}
}
}
return res;
}