leetcode链接:面试题 0106.字符串压缩
思路: 开辟一个新的空间(空间要大一点,因为可能压缩后的字符串比原字符串大),然后遍历原字符串统计当前字符的个数,再写入到新开辟的空间中,最后只需判断一下原字符串长度和新字符串长度决定返回谁即可。
代码:
char* compressString(char* S){
int S_length = strlen(S);
char * new_str = (char*)calloc(S_length * 3 , sizeof(char));
int i = 0;
while (S[i]) {
int count = 1;
int left = i;
int right = i + 1;
while (S[right] && S[left] == S[right]) {
count++;
right++;
}
// 写入新的字符串中
// 注:sprintf 返回的是上次写回的字符个数
sprintf(new_str, "%s%c%d" , new_str , S[left] , count);
i = right;
}
return strlen(new_str) >= S_length ? S : new_str;
}