Likou1047。文字列スタック内の隣接するすべての重複を削除します

1047.文字列内の隣接するすべての重複を削除します

小文字で構成される文字列Sが与えられると、重複削除操作は2つの隣接する同一の文字を選択し、それらを削除します。

削除できなくなるまで、Sで重複排除操作を繰り返します。

すべての重複排除操作が完了すると、最後の文字列が返されます。答えはユニークであることが保証されています。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
提示:

1 <= S.length <= 20000
S 仅由小写英文字母组成。

回答:

典型的な最初から最後の問題は、元の配列にスタックを直接構築することで解決できます。

コード:

char * removeDuplicates(char * S){
    
    
    int top = 0;
    for(int i=0;i<strlen(S);i++)
    {
    
    
        if(top==0)
        {
    
    
            S[top]=S[i];
            top++;
        }
        else
        {
    
    
            if(S[top-1]==S[i])
            {
    
    
                top--;
            }
            else
            {
    
    
                S[top]=S[i];
                top++;
            }
        }
    }
    S[top]='\0';
    return S;
}

おすすめ

転載: blog.csdn.net/xiangguang_fight/article/details/112755486