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;
}