LeetCode 面試題01.06

m0_51091718發表於2020-10-21
我之前的思路是引入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;
}

相關文章