これはだいぶ難しい問題ですね!
問題概要
4 文字の文字列 が与えられる。
がちょうど 2 種類の文字からなり、それらの文字がちょうど 2 個ずつあるかどうかを判定せよ。
解法
色んな解法があると思われる。ここでは、 をアルファベット順にソートしてしまうことを考えた。
そうすると、たとえば = "bebe" のときには、 = "bbee" というようになる。そうすれば、次の条件をすべて満たすかどうかを判定すればよくなる。
S[0] == S[1]
S[1] != S[2]
S[2] == S[3]
ここで、S[1] != S[2]
という条件を忘れてはいけない。これを入れておかないと = "ffff" のようなものも "Yes" と誤判定してしまうのだ。
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; sort(S.begin(), S.end()); if (S[0] == S[1] && S[1] != S[2] && S[2] == S[3]) cout << "Yes" << endl; else cout << "No" << endl; }