1047文字列内の隣接するすべての重複を削除(すべての重複したエントリの隣接する文字列を削除します)
リンク:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
トピック:
ストリングSは、重複を削除し、隣接する2つの同一の文字を選択し、それらを削除し、小文字で与えられます。
削除されるまで繰り返し、削除を複製Sに行われ、継続することはできません。
すべての重複削除が完了した後、最終的な文字列を返します。唯一の答え保証。
例:
入力:「abbaca」
出力:「CA」
の解釈:
例えば、「abbaca」のを、私たちは、これは、この時間は、削除操作を実行できる唯一の重複で、隣接する二つの文字と同じように「BB」を削除することができます。我々は取得した後にのみ、「AA」を持っている文字列「AACAは」、削除重複を行うことができ、最終的な文字列は、「CA」です。
ヒント:
1 <= s.length <= 20000
のみ小文字によってS。
アイデア:
私は手紙がに、そして次のものと同じ場合、スタックへの、またはスタックに行く、スタックを助けるためにここにいる、そして最終的にStringBufferの文字列を生成するために、それを転置助けます。100%以上が、30%以上のメモリは、それが迷惑です。
(アイデアは私のコード規格を変更.......)
コード:
1 パブリック 静的文字列removeDuplicates(文字列S){ 2 のchar [] CH = S.toCharArray()。 3 スタックスタック= 新しいスタック()。 4 INT I = 0 。 5 一方(iは< ch.length)を{ 6 場合(stack.empty()){ 7 stack.push(CH [I])。 8 } そう であれば(stack.peek()に等しい(CH [I])){ 9 stack.pop()。 10 } 他{ 11 stack.push(CH [I])。 12 } 13 私は++します; 14 } 15 16 StringBuilderのSB = 新規のStringBuilder(); 17 ながら(!stack.empty()){ 18 sb.append(stack.pop())。 19 } 20 リターンsb.reverse()のtoString()。 21 }