版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/84927381
问题:给定一组字符,使用原地算法将其压缩。
压缩后的长度必须始终小于或等于原数组长度。
数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。
在完成原地修改输入数组后,返回数组的新长度。
进阶:
你能否仅使用O(1) 空间解决问题?
思路:要注意的是chars最后是什么,是和前一位不一样的还是一样的; 具体下面代码有标注,o(1)解法暂未能实现,如有不同思路,欢迎留言;
class Solution {
public int compress(char[] chars) {
int i=0;
int j=1;
int n=1;
StringBuffer sb=new StringBuffer();
while(j<chars.length){
if(chars[i]==chars[j]&& j==chars.length-1){ //j 走到最后并且i!=chars.length-2
sb.append( chars[i]);
if(n!=1){
sb.append(n+1);
}else{
sb.append(n);
}
break;
}
if(chars[i]!=chars[j] ){ //
sb.append( chars[i]);
if(n!=1){
sb.append(n);
}
n=1;
i=j;
j++;
if(j==chars.length){ // 最后一位只有一个的情况
sb.append( chars[i]);
break;
}
continue;
}
if(chars[i]==chars[j]){
n++;
j++;
}
}
System.out.println(sb);
return sb.length();
}
}