Unification [AtCoder Beginner Contest 120 C]
解説にある方法で簡単に解くことができますが、勉強のためにスタックで解いてみます。
文字列の i 文字目を c としたとき、
・c と スタックの最初の値 が異なるとき → スタックをpopする
・c と スタックの最初の値 が同じ or 空のとき → スタックにpushする
という処理を文字列の末尾までおこなったあと、
スタックに残っている値の数 を 文字列の長さ から引いたものが答えです。
void solve () { String s = next(); ArrayDeque<Character> dq = new ArrayDeque<>(); for (int i=0; i<s.length(); i++) { char c = s.charAt(i); if (dq.isEmpty() || dq.getFirst()==c) { dq.addFirst(c); } else { dq.removeFirst(); } } out.println(s.length() - dq.size()); }