Help us understand the problem. What is going on with this article?

~ これだけ解けば十分闘える!過去問精選 10 問 ~ の9問目 Daydream をPHPで

More than 1 year has passed since last update.

はい、前の記事の続きです。

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ から、9問目

与えられた文字列が、"dream", "dreamer", "erase", "eraser"を任意に組み合わせることで、できるか判定せよ。という問題。

はっきり言ってしまえば、もっと難しい組み合わせだったら、私は正解できないかもしれません。

こちらの問題の場合は、例えばdreamer…という文字列を先頭の方から見ると、

dream/er…
dreamer/…

どちらか分からないので探索することになります。
この手の問題は苦手です……

ただ、後ろから見れば最後の文字が drea m、eras e、dreame r、erase r でrが2つありますが、後ろから3文字目で見分けがつきますので、判定は可能です。

そんな訳で、4つの単語と末尾を比較して、一致したらどんどん削っていき、何も文字が残らなかったら YES 、何か残っていたら NO と出力するプログラムを書きました。

<?php
$words = ["dream", "dreamer", "erase", "eraser"];

fscanf(STDIN, "%s", $S);

while($S) {
    $flg = false;

    foreach ($words as $word) {
        $len = strlen($word);
        $exam = substr($S, -$len);
        if ($exam === $word) {
            $S = substr($S, 0, strlen($S) - $len);
            $flg = true;
            break;
        }
    }

    if ($flg === false) break;
}

echo $S === "" ? "YES\n" : "NO\n";

image.png

前からがダメなら、後ろから行けばいいじゃない?ということで。

takepan
PC-8001の産湯をつかい、姓は車、名は寅次郎 人呼んでtakepanと発します
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした