問題
問題文
英小文字からなる文字列 $S$ が与えられます.$S$ に現れない英小文字であって,最も辞書順(アルファベット順)で小さいものを求めてください.ただし,$S$ にすべての英小文字が現れる場合は,代わりに None を出力してください.
制約
・$1 \le |S| \le 10^5$ ($|S|$ は文字列 $S$ の長さ)
・$S$ は英小文字のみからなる.
収録されている問題セット
回答
回答1 (AC)
文字列 s で使用されていない文字を聞かれているので、文字列 s で使用されている文字を set 型の変数 letter に保持し、アルファベット列 "abcdefghijklmnopqrstuvwxyz" のうちで最初に使用されていない文字を出力すれば良いでしょう。"None" を出力するのは文字列 s で全てのアルファベットが使用されているときなので、letterのサイズが26になっているときです。コードは以下のようになりました。
abc071b-1.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
set<char> letter;
for ( int i=0; i<(int)s.size(); i++ ) {
letter.insert(s.at(i));
}
if ( letter.size()==26 ) {
cout << "None" << endl;
} else {
string alphabet="abcdefghijklmnopqrstuvwxyz";
for ( int i=0; i<26; i++ ) {
if ( s.find(alphabet.at(i))==-1 ) {
cout << alphabet.at(i) << endl;
break;
}
}
}
}
調べたこと
AtCoder の解説 → コンテスト全体の解説
アルファベットと文字コードを変換する方法を使用していました。
リンク
前後の記事
- 前の記事 → AtCoderログ:0064 - ABC 213 に参加しました
- 次の記事 → AtCoderログ:0066 - ABC 213 A