まずは各文字が何回ずつ使われるかを求めよう!
問題概要
英小文字のみからなる長さ の文字列
が与えられる。次の条件を満たすかどうかを判定せよ。
【条件】
すべての に対して、
中にちょうど
回登場する文字が 0 種類または 2 種類である。
制約
考えたこと
まず、各文字の出現頻度を求めるために、次の配列を求めましょう。
num[c]
:文字列中に文字
が何個あるか
これを求めたあとは、 (具体的には
の範囲で)について、
num[x] == i
となる文字 x
が 0 または 2 個であることを確かめればよいでしょう。
コード
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; vector<int> num(26, 0); for (auto c : S) num[c - 'a']++; bool res = true; for (int i = 1; i <= S.size(); i++) { int syurui = 0; for (int j = 0; j < 26; j++) if (num[j] == i) syurui++; if (syurui != 0 && syurui != 2) res = false; } cout << (res ? "Yes" : "No") << endl; }