[プログラマ]-ペアリングJavaの削除


問題の説明


ペアリングを削除するには、アルファベット小文字の文字列で開始します.まず、文字列内で同じ文字を2つ持つペアを検索します.次に、この2つの文字列を削除し、前後に文字列を接続します.この手順を繰り返してすべての文字列を削除すると、ペアリングの削除が終了します.文字列Sが指定されている場合は、ペアリングを正常に削除できるかどうかを返す戻り関数を完了します.成功した場合は1を返し、そうでない場合は0を返します.
例えば、文字列S=Baabaa
b aa baa → bb aa → aa →
すべての文字列を中の順序で削除できるため、1を返します.

I/O例



Java Code


問題では、という言葉は通常stackを表す.
代表的なのは괄호 짝についての質問です.
最初はこのヒントに気づいていませんでしたがreplaceAllの正規式を使いたいのですが時間がかかりました...ほほほ
import java.util.*;
class Solution
{
    public int solution(String s)
    {
        int answer = -1;
        char[] carr = s.toCharArray();
        Stack<Character> stack = new Stack<>();   
    
        for (int i=0;i<carr.length;i++) {
            char c = carr[i];
            // 스택이 비어있다면 현재 문자는 반복될 일이 없으므로 push
            if (stack.isEmpty()) stack.push(c);
            // 스택이 비어있지 않다면
            else {
                // 스택의 top확인(peek) - 만약 현재 문자와 같다면 반복이므로 스택에서 pop하고 현재 문자도 스택에 넣지 않음
                // 이렇게 되면 스택에는 반복이 발생하는 이전문자와 현재문자 모두 들어가지 않게 됨 (반복제거)
                if (stack.peek() == c) {
                    stack.pop();
                // 스택의 top이 현재 문자와 다르다면 반복이 아니므로 push
                } else {
                    stack.push(c);
                }
            }
        }        
        // 스택에 남아있는 값들은 반복되지 않는 값들임 즉, 비어있어다면 모두 짝지어 반복된 것
        return stack.isEmpty() ? 1 : 0;
    }
}