まずは各文字が何回ずつ使われるかを求めよう!
問題概要
英小文字のみからなる長さ の文字列 が与えられる。次の条件を満たすかどうかを判定せよ。
【条件】
すべての に対して、 中にちょうど 回登場する文字が 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; }