Q: 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符,如果没有,输出no.
解法一: 当字符数组比较大时——可以用哈希表
我们第一遍扫描这个数组时,每碰到一个字符,在哈希表中找到对应的项并把出现的次数增加一次。这样在进行第二次扫描时,就能直接从哈希表中得到每个字符出现的次数了。
#include<bits/stdc++.h>
using namespace std;
char s[1000000];
int b[26];
int main()
{
gets(s);int l=strlen(s); // l为字符串的长度;
for(int i=0;i<l;i++)
b[s[i]-'a']++; //记录是否只出现一次;
for(int i=0;i<l;i++)
if(b[s[i]-'a']==1) //找到第一个仅出现一次的字符;
{
printf("%c",s[i]);
return 0;
}
cout<<"no";
return 0;
}
解法二: 当字符数组比较小时——用遍历法
#include<bits/stdc++.h>
using namespace std;
char a[1000000];
int main()
{
int k,i,l;
scanf("%s",a); l=strlen(a);
for(int i=0;i<l;i++)
{ k=0; //k存储第i个字符的出现次数,必须在循环内置为0;
for(int j=0;j<l;j++) //从头找与第i个字符相同的字符;
if(a[i]==a[j])
k++;
if(k==1)
{
cout<<a[i];
exit(0); //如果第i个字符只出现一次就输出并退出程序,不再找;
}
}
printf("no");
return 0;
}