自分用にAtCoderの解答をまとめていきます。誤った情報があったら、申し訳ございません。
覚えること
-
StringBuilderクラス
StringクラスはImmutable(不変)なクラスであるため、変更ができない。そのため、StrigBuilderで変更できるようにする。今回の例だと、reverseメソッドで逆順にする。toString()でString型に戻すこともできる。 -
startWithメソッド
Stringクラスのメソッド。文字列が指定された部分文字列で始まるかどうかを判定することができる。 -
逆から考える
今回の例だと、前から考えるとprefixな関係になってしまう。そのため、逆から考えると、楽に処理することができる。
コード
ABC049C_Daydream
import java.util.Scanner;
public class ABC049C_Daydream {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
String S = sc.nextLine();
String[] divide = { "dream", "dreamer", "erase", "eraser" };
S = new StringBuilder(S).reverse().toString();
for (int i = 0; i < 4; i++) {
divide[i] = new StringBuilder(divide[i]).reverse().toString();
}
boolean can = true;
for (int i = 0; i < S.length();) {
boolean canDivide = false;
for (int j = 0; j < 4; j++) {
String d = divide[j];
if (S.startsWith(d, i)) {
canDivide = true;
i += d.length();
}
}
if (!canDivide) {
can = false;
break;
}
}
if (can) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}
参考にしたサイト