条件が複雑なので、綺麗に整理しよう!
問題概要
3 文字の文字列 が与えられる。
の中に「一度だけ登場する文字」が存在するならば、そのうちのどれか 1 つを出力せよ。
一度だけ登場する文字が存在しない場合は -1 と出力せよ。
考えたこと
いろんな解法が考えられる。まず、3 個の文字の被り方のパターンは次のいずれかになる。
- 3 個すべて同じ文字である
- 2 個が同じ文字で、残りの 1 個は異なる文字である
- すべて互いに相異なる文字である
これらを順に見ていこう。
パターン 1:3 個すべて同じ文字
この場合は「一度だけ登場する文字」は存在しないので、-1 を出力しよう。
パターン 2:2 個が同じ文字で、残りの 1 個は異なる文字
この場合は、さらに次の 3 パターンに分かれる。
S[0] == S[1]
のとき:残りのS[2]
は一度だけ登場する文字であるS[1] == S[2]
のとき:残りのS[0]
は一度だけ登場する文字であるS[2] == S[0]
のとき:残りのS[1]
は一度だけ登場する文字である
パターン 3:すべて互いに相異なる文字
この場合は、S[0]
, S[1]
, S[2]
のうちのどれを出力してもよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; if (S[0] == S[1] && S[1] == S[2]) cout << -1 << endl; else if (S[0] == S[1]) cout << S[2] << endl; else if (S[1] == S[2]) cout << S[0] << endl; else if (S[2] == S[0]) cout << S[1] << endl; else cout << S[0] << endl; }