如果只找出现过一次的字符,那么直接使用哈希存储即可,代码如下。
#include<iostream>
#include<cstring>
using namespace std;
char a[100001];
int b[27];
int main()
{
int i=0;
while(scanf("%c",&a[i])==1)
{
b[a[i]-'a']++;
i++;
}
for(int i=0;i<strlen(a);i++)
{
if(b[a[i]-'a']==1)
{
cout<<a[i]<<endl;
return 0;
}
}
cout<<"no"<<endl;
return 0;
}
但是,该题是找第一次只出现一次的字符,通过上述方法找到的可能是出现一次的但是不是第一个只出现一次的字符,比如abdcba,其第一次只出现一次的字符是d,但是上述代码输出的是c,就很明显出现错误。
我们应该使用如下操作。
双重for循环,第一层用于遍历整个字符串,第二层也是用于遍历整个字符串,其主要记录第一层字符串中的每一个元素在字符串中出现的元素个数,如果元素个数为1则直接记录并返回。
#include<iostream>
#include<cstring>
using namespace std;
char a[100001];
int b[27];
int main()
{
int i=0,s;
scanf("%s",a);
for(int i=0;i<strlen(a);i++)
{
s=0;
for(int j=0;j<strlen(a);j++)
{
if(a[i]==a[j])
s++;
}
if(s==1)
{
cout<<a[i]<<endl;
return 0;
}
}
cout<<"no"<<endl;
return 0;
}