ABC
D - Take ABC

D - Take ABC

キーワード

解説

問題 (opens in a new tab)

1 文字ずつstackにいれていき, 先頭 3 文字を確認して"ABC"であればその文字をstackから消す操作を繰り返せば良い.

go の場合は, ただの配列を stack として扱うことが可能. (slicing の計算量は O(1)\mathrm{O}(1) ?)

Go 言語: スライスの構造 (opens in a new tab)

提出コード

func main() {
	S := readString()
 
	stack := []string{}
 
	for _, s := range S {
		stack = append(stack, string(s))
 
		l := len(stack)
		if l < 3 {
			continue
		}
 
		if stack[l-3] == "A" && stack[l-2] == "B" && stack[l-1] == "C" {
			stack = stack[:l-3]
		}
	}
 
	for _, s := range stack {
		write(s)
	}
}