AtCoder:10 ABC049C – 白昼夢
https://atcoder.jp/contests/abs/tasks/arc065_a
問題文は上記リンクを参照。
この問題は与えられた複数の文字列Aをつなげて、文字列Sを作ることができるかどうかという問題です。
逆に言えば文字列Sを与えられた複数のAで分解していけば、最終的に空文字になるかという問題と同じです。
最初は真面目に文字列Sを構成する文字を、Aを構成する文字と一字ずつ一致するか確認していました。
ですが、他にいろいろ便利なメソッドがあります。
例えばこういった書き方をしている人が何人かいました。
S.replace("eraser", "") .replace("erase", "") .replace("dreamer", "") .replace("dream", "")
replaceメソッドを使い、空文字と置き換えていきます。
考え方は上記方法と同じで、Sが最終的に空文字になっていれば全て一致しています。
最終的に空文字日程ればYES、そうでなければNOと表示するので、if文自体の条件に上記メソッドチェーンを組みこむことができます。
val result = if (S.replace("eraser", "") .replace("erase", "") .replace("dreamer", "") .replace("dream", "").isEmpty() ) "YES" else "NO"
ただここまでまとめて書くと、読む人にとっては読みやすいいいコードとは言えなさそうですね。