問題概要
文字列 $S$ が与えられる.$S$ は以下で説明する $A, B, C$ で $A + B + C$ の形で表せるか?*1
- $0$ 個以上の文字 $`\text{A'}$ からなる文字列を $A$ ,$0$ 個以上の文字 $`\text{B'}$ からなる文字列を $B$ ,$0$ 個以上の文字 $`\text{C'}$ からなる文字列を $C$ とする.
制約
- $1 \leq |S| \leq 100$
解法
別に賢い方法もあるのですがソレは無視して題意から直接解釈すると,条件を満たす $S$ とは,
- 連続する同じ文字を $1$ 文字に潰したとき,
- $``\text{ABC''}$ の部分列になるような $S$ .
と言えます.Haskell では前者は group と head,後者は isSubsequenceOf という関数があるので,以下のように一行で事足ります.
コード
main = getLine >>= putStrLn . ( \f -> if f then "Yes" else "No" ) . ( `isSubsequenceOf` "ABC" ) . map head . group