LeetCode 面试题01.06

it2025-06-03  10

我之前的思路是引入count2作为不同字母的个数从而确定压缩后字符串的下标,而且在下面的for循环的else分支是这样赋值的: q[2*count2] = p[i]; q[2*count2+1] = '0' + count1; 显然这是错误的,当count1>=10时,就会发生越界错误。 这里感谢一起学习的大佬提供的思路,使用sprintf能有效解决这个问题,其返回值正好可以帮助确定下标。 ```c char * compressString(char * S) { int len = strlen(S); int clen; char *q = (char *)malloc(sizeof(char)*(2*len)); int count1 = 1;//统计相同字母的个数 int count2 = 0;//确定输出字符串的下标 if(len <= 2) { return S; } for(int i = 1;i < len+1 ; ++i) { if(S[i-1] == S[i]) { count1++; } else { q[count2++] = S[i-1]; clen = sprintf(&q[count2],"%d",count1); count2 += clen; count1 = 1; } } q[count2] = '\0'; clen = strlen(q); if(clen < len) { return q; } return S; }
最新回复(0)