Official
A - A Unique Letter Editorial
by
A - A Unique Letter Editorial
by
physics0523
今回の問題を以下のように場合分けで解くことは可能です。
実装例(C++):
Copy
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
if(s[0]!=s[1] && s[0]!=s[2]){cout << s[0] << "\n";}
else if(s[1]!=s[0] && s[1]!=s[2]){cout << s[1] << "\n";}
else if(s[2]!=s[0] && s[2]!=s[1]){cout << s[2] << "\n";}
else{cout << "-1\n";}
return 0;
}
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; if(s[0]!=s[1] && s[0]!=s[2]){cout << s[0] << "\n";} else if(s[1]!=s[0] && s[1]!=s[2]){cout << s[1] << "\n";} else if(s[2]!=s[0] && s[2]!=s[1]){cout << s[2] << "\n";} else{cout << "-1\n";} return 0; }
しかし、今回の解説では、より野心的に「文字列 にある文字が何度含まれるか」という問題を解くことを考えましょう。
入力 abcbz
の時に目指す出力
Copy
a : 1
b : 2
c : 1
d : 0
...
y : 0
z : 1
a : 1 b : 2 c : 1 d : 0 ... y : 0 z : 1
基本となる考えはバケットソートですが、今回は添え字を文字として取り扱う必要があります。
これには色々な方法がありますが、例えば、連想配列 map<char,int>
(文字 (char
型) を添え字にとって int
型の配列のように扱えるデータ構造。 map<char,int>
の場合は0で初期化される。) を用いて、以下のように実装できます。
実装例(C++):
Copy
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
map<char,int> mp;
for(auto &nx : s){mp[nx]++;}
for(char i='a';i<='z';i++){
cout << i << " : " << mp[i] << "\n";
}
return 0;
}
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; map<char,int> mp; for(auto &nx : s){mp[nx]++;} for(char i='a';i<='z';i++){ cout << i << " : " << mp[i] << "\n"; } return 0; }
このコードを応用すれば、今回の問題を解くこともできます。
実装例(C++):
Copy
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
map<char,int> mp;
for(auto &nx : s){mp[nx]++;}
for(char i='a';i<='z';i++){
if(mp[i]==1){cout << i << "\n";return 0;}
}
cout << "-1\n";
return 0;
}
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; map<char,int> mp; for(auto &nx : s){mp[nx]++;} for(char i='a';i<='z';i++){ if(mp[i]==1){cout << i << "\n";return 0;} } cout << "-1\n"; return 0; }
posted:
last update: