问题描述
给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。请在 修改完输入数组后 ,返回该数组的新长度。你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
解析
这题有点小无语,要返回的是一个int类型的数据,结果检查的又是chars数组,而且最后修改chars指向新的地址还不行,他要修改原chars数组指向的位置的数据,不明所以的一道题,题目倒是没啥难度,写完不敢相信这是中等题,一判题,果然,输出格式都对不上…
public class Solution {
public int compress(char[] chars) {
int len = chars.length;
int i = 0, j = 0;
int write = 0;
while(j < len){
char curChar = chars[i];
chars[write] = curChar;
write++;
while (j < len && chars[j] == curChar){
j++;
}
int repetitions = j - i;
if(repetitions > 1){
String str = String.valueOf(repetitions);
for(int k = 0; k < str.length(); k ++){
chars[write++] = str.charAt(k);
}
}
i = j;
}
return write;
}
}
如果要卷复杂度就不要用String.valueOf,手写代码写入长度,但是代码太不优雅了就不贴了。