同じ文字が連続するかどうかを判定するのは、しばしば見かけますね。ラストに注意!
問題概要
"salty" または "sweet" からなる 個の文字列 がこの順に与えられる。
"sweet" が 2 回連続すると、それ以降の文字列を受け入れられなくなる。すべての文字列が受け入れられるかどうかを判定せよ。
考えたこと
0-indexed で考えよう。そうすると、文字列は
と表されることとなる。判定したいことは、次のように分解できる。
- がともに "sweet" ならば、"No"
- がともに "sweet" ならば、"No"
- がともに "sweet" ならば、"No"
- ...
- がともに "sweet" ならば、"No"
ここで、上記をすべて満たしていれば、最後のペア については、ともに "sweet" であっても問題ないことに注意しよう(すでに全文字列を受け入れているため)。
あとは、上記のことを実装すればよい。具体的には、 に対して、 がともに "sweet" であれば "No" であると判定すればよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<string> S(N); for (int i = 0; i < N; ++i) cin >> S[i]; bool res = true; for (int i = 0; i <= N - 3; ++i) { if (S[i] == "sweet" && S[i+1] == "sweet") res = false; } cout << (res ? "Yes" : "No") << endl; }