問題
英小文字からなる文字列Sが与えられます。Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことでS=Tとすることができるか判定してください。
- Tの末尾に
dream
dreamer
erase
eraser
のいずれかを追加する。
入出力例
入力例1 erasedream 出力例1 YESerase
,dream
の順でTの末尾に追加することで S=T とすることができます。 入力例2 dreameraser 出力例2 YESdream
,eraser
の順で追加することで S=Tとすることができます。 入力例3 dreamerer 出力例3 NO
自分の回答
def daydream(words)
words = words.gsub(/eraser/,"").gsub(/erase/,"").gsub(/dreamer/,"").gsub(/dream/,"")
puts words.length == 0 ? "YES" : 'NO'
end
words = gets.chomp.to_s
daydream(words)
正直、問題文が何を言おうとしているのか、理解するのが難しかったです。考え方としては、とりあえず、与えられた単語にdream
dreamer
erase
eraser
が含まれていたら、取り除いていき、きれいにすべての文字が取り除けたらYESと出力すればいいです。
問題なのは、単語の取り除く順番です。”dreamer”という単語の中に”er”という部分が入っているので、先に”dreamer”という単語を排除してしまうと、本来”erase”として抜き出せるのに、”ase”となって抜き出せなくなってしまいます。なので、”eraser”、”erase”から抜き出します。
例 dreameraser => dreamerを取り除くとaserとなり、答えはNOとなるが、これは不正解 dreameraser => eraserを取り除くとdreamerが残り、dreamerを取り除いて、答えはYESとなる