B2110の题解
TJU3025002704 · · 题解
大意
给出一个字符串,求出其中第一个只出现过一次的小写字母,若没有输出 no。
分析
我们看到这个题目可以很容易的想出用桶排序的思想。但是题目中给的是字符串,怎么用整形表示?我们想一想,有哪个数据结构可以实现不同数据类型的映射?答案是: STL 库中的 map !
介于大家并不是十分了解 map ,这里简单介绍一下:我们可以把 map 看作一个可以存储任何数据形式的动态数组(也就是下标不做限制的数组啦),它的定义方式为:
map <存储进去的类型,用来表示数据的类型> 名称;
举个例子,在本题中我们可以建立一个 char 类型与 int 类型相互映射(照应)的 map 来进行桶排序,即定义过程为
map <char,int> a;
最后是闪亮的代码啦。
代码
#include <map> //使用 map 要调用 map 库
#include <iostream>
#include <string>
using namespace std;
map <char,int> a;
string s;
int main()
{
cin>>s;
for(int i = 0; i <=s.size(); i++) //注意字符串从 0 开始
{
a[s[i]]++;
}
for(int i = 0; i <= s.size(); i++)
{
if(a[s[i]] == 1)
{
cout<<s[i];
return 0;
}
}
cout<<"no";
return 0;
}