#はじめに
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます
わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください
問題文
文字列$S$は空文字列$T$の末尾に dream dreamer erase eraser のいずれかを追加して、$S = T$が成立するか判定せよ。
制約
- $1≤|S|≤10^5$
- $S$は英小文字からなる。
入力
S
出力
$S=T$とすることができる場合は YES
をそうでない場合は NO
を出力
入力例
erasedream
出力例
YES
erase dream の順で$T$の末尾に追加することで$S=T$とすることができる。
回答
s = gets.chomp
s = s.gsub(/eraser/,"").gsub(/erase/,"").gsub(/dreamer/,"").gsub(/dream/,"")
puts s.length == 0 ? "YES" : 'NO'
gsubを使う場合、()の中は正規表現じゃないとだめみたいなので注意。(最初配列を使ってeachで文字を順繰り消去しようとしたが、うまくいかなかった)
他の方の回答では、each、chom!メソッドを使って、末尾から消去していく方法もありました。
また、正規表現を使うと
puts gets.match(/^(dream|dreamer|erase|eraser)+$/)? "YES" : "NO"
と1行で表せてしまいます。
感想
今回は難しかったです。自力で解くことはできませんでした・・!
いろんな方の回答例を参照させていただいて形にしました。かなり勉強になりました🤔
初めて正規表現を使ってみました!使えるようになるまで結構時間がかかりましたが、これを格好良く使いこなせる様になりたいですね。
参考文献
Rubyで指定した文字列が含まれるか確かめる方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
【Rubyの正規表現!】基礎の基礎から応用まで徹底解説! | 侍エンジニアブログ
はじめてのRuby!matchメソッドで正規表現によるマッチング | 侍エンジニアブログ