给你一个字符数组 chars ,请使用下述算法压缩:
从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :
如果这一组长度为 1 ,则将字符追加到 s 中。
否则,需要向 s 追加字符,后跟这一组的长度。
压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。
请在 修改完输入数组后 ,返回该数组的新长度。
你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
在内部直接修改,不会影响到后面的
int compress(char* chars, int charsSize){ int index = 0; int i,j; printf("%c",chars[index]); for(i = 0;i < charsSize;) { // if(i == charsSize-1) // { // chars[index] = chars[i]; // break; // } j = i+1; while(j < charsSize && chars[j] == chars[i]) //曾经的考点咋都忘了 &&前后条件不能交换顺序 因为要先判断越界 !! { j++; } if(j-i > 1) { chars[index++] = chars[i]; int d = j-i; int d_index = 0; int arr[5]; while(d > 0) { arr[d_index] = d%10; d = d/10; d_index++; } //保存好多个重复的时候 12个 要存‘1’,‘2’ printf("%c",(j-i)+'0'); while(d_index--) { chars[index++] = arr[d_index]+'0'; } // chars[index++] = (j-i)+'0'; printf("%c",chars[index-1]); } else if(j-i == 1) { chars[index++] = chars[i]; } if(j == charsSize) { break; } i = j; } charsSize = index; return charsSize; }