(備忘録)AtCoderをやって 5 (白昼夢)
問題
英小文字からなる文字列 S が与えられます。 Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことで S=T とすることができるか判定してください。
- T の末尾に dream dreamer erase eraser のいずれかを追加する。
制約
1≦∣S∣≦10 5
S は英小文字からなる。
自分の回答(他の方の回答見てから)
"dream dreamer erase eraser"が入っている配列を作って、それから与えられた文字列をsplitに正規表現で該当する文字列を抽出して配列にして。。。 なんてことをやろうとしてたら全然進みませんでした。他の方の回答見ていたら、gsub使えば文字列を部分的に抽出できることを知りました。 (ちなみに正規表現の使い方イマイチ分かっていなくてgsubを複数回使っている部分は改善の余地ありそうです) また考え方としてgsubで該当する文字列は""に置き換えて、lengthが0かどうかで条件分けする発想が思いついていなかったので勉強になりました。
s = gets.chomp result = s.gsub(/eraser/, "").gsub(/erase/, "").gsub(/dreamer/, "").gsub(/dream/, "") puts result.length == 0 ? "YES" : "NO"