问题描述:
Given an array of characters, compress it in-place.
The length after compression must always be smaller than or equal to the original array.
Every element of the array should be a character (not int) of length 1.
After you are done modifying the input array in-place, return the new length of the array.
Follow up:
Could you solve it using only O(1) extra space?
Note:
All characters have an ASCII value in [35, 126].
1 <= len(chars) <= 1000.
代码:
class Solution {
public int compress(char[] chars) {
if(chars.length == 0) return 0;
int mark = 0;
int write = 0;
for(int i = 0; i < chars.length; i++){
if(i + 1 == chars.length || chars[i] != chars[i+1]){
chars[write] = chars[mark];
write++;
if(mark < i){
for(char a : (""+(i-mark+1)).toCharArray())
chars[write++] = a;
}
mark = i + 1;
}
}
return write;
}
}