【题目链接】
ybt 1130:找第一个只出现一次的字符
OpenJudge NOI 1.7 02:找第一个只出现一次的字符
【题目考点】
1. 字符串
2. 散列存储
【解题思路】
依据散列存储思想,设数组a,a[字母]表示该字母已出现的个数。比如a[‘b’]表示字母b出现的个数。
各字母的ascii码都处于0~128范围之内,数组a的长度设为128就够用了。
具体过程如下:
- 输入字符串
- 遍历字符串,统计各个字母出现的个数
- 再次从前向后遍历字符串,判断当前字符是不是只出现过一次。如果是,输出该字符,程序结束。
- 如果没输出过字符,输出no
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[128] = {};//数组a[字母]表示该字母出现的次数,初始化为0
char s[100005];
scanf("%s", s);
int len = strlen(s);
for(int i = 0; i < len; ++i)
a[s[i]]++;
for(int i = 0; i < len; ++i)//遍历字符串,找到第一个只出现一次的字符
{
if(a[s[i]] == 1)
{
printf("%c", s[i]);
return 0;
}
}
printf("no");//没找到
return 0;
}