1047.文字列内の隣接するすべての重複を削除します
小文字で構成される文字列Sが与えられると、重複削除操作は2つの隣接する同一の文字を選択し、それらを削除します。
削除できなくなるまで、Sで重複排除操作を繰り返します。
すべての重複排除操作が完了すると、最後の文字列が返されます。答えはユニークであることが保証されています。
例:
入力: "abbaca"
出力: "ca"
説明:
たとえば、 "abbaca"では、 "bb"を削除できます。2つの文字が隣接していて同じであるため、現時点で削除できる重複アイテムはこれだけです。 。次に、文字列「aaca」を取得します。このうち「aa」のみが重複排除操作を実行できるため、最終的な文字列は「ca」になります。
促す:
1 <= S.length <= 20000
Sは、小文字の英字のみで構成されます。
回答:
public String removeDuplicates(String S) {
char[] c = S.toCharArray();
int len = c.length;
Stack<Character> stack = new Stack<>();
for(int i=0; i<len; i++) {
if(stack.isEmpty() || c[i] != stack.peek()) {
stack.push(c[i]);
} else {
stack.pop();
}
}
StringBuilder str = new StringBuilder();
for(Character ch:stack) {
str.append(ch);
}
return str.toString();
}