问题描述:
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;
}
}
本文介绍了一种用于压缩字符数组的算法实现,该算法能够在原地修改输入数组,并确保压缩后的数组长度小于或等于原始数组长度。文章提供了一个具体的Java代码示例,展示了如何通过遍历数组并记录连续重复字符来实现压缩。

被折叠的 条评论
为什么被折叠?



