Dive into Coding Life

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"

ただここまでまとめて書くと、読む人にとっては読みやすいいいコードとは言えなさそうですね。