文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Unification [AtCoder Beginner Contest 120 C]

atcoder.jp


解説にある方法で簡単に解くことができますが、勉強のためにスタックで解いてみます。


文字列の 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());

}