AtCoder ABC 049 A&B&C
A問題
private void solveA() {
final Set<Character> wl = new HashSet<Character>();
wl.add('a');
wl.add('i');
wl.add('u');
wl.add('e');
wl.add('o');
char numN = next().charAt(0);
out.println(wl.contains(numN) ? "vowel" : "consonant");
}
B問題
- 同じ文字列を二回append
private void solveB() {
int numH = nextInt();
int numW = nextInt();
char[][] wk = IntStream.range(0, numH).collect(() -> new char[numH][numW],
(t, i) -> {
t[i] = next().toCharArray();
},
(t, u) -> {
Stream.concat(Arrays.stream(t), Arrays.stream(u));
});
StringBuilder builder = new StringBuilder();
for (char[] cs : wk) {
for (int j = 0; j < 2; j++) {
builder.append(cs);
builder.append(System.lineSeparator());
}
}
out.println(builder.toString());
}
C問題
- 4種類の文字を空文字に置き換えていって、置き換え切れたらOK
- 4種類の文字を後ろに足していって = 4種類の文字しか使われていない
- 置換する際誤判定が起きないよう、元の文字列及び4種類の文字を逆順にして判定を行う
- 問題どおりの文字列を順序を考えずに置換しようとすると以下の可能性がある
-
esaremaerd
をremaerd
で置き換えてesa
となる
-
- 問題どおりの文字列を順序を考えずに置換しようとすると以下の可能性がある
private void solveC() {
StringBuilder dream = new StringBuilder("dream");
StringBuilder dreamer = new StringBuilder("dreamer");
StringBuilder erase = new StringBuilder("erase");
StringBuilder eraser = new StringBuilder("eraser");
String wk = new StringBuilder(next()).reverse().toString()
.replace(eraser.reverse().toString(), "")
.replace(erase.reverse().toString(), "")
.replace(dreamer.reverse().toString(), "")
.replace(dream.reverse().toString(), "");
if (wk.equals("")) {
out.println("YES");
} else {
out.println("NO");
}
}