这个题思路就是,利用hash表把所有的字符存储进去,然后通过链表寻找的方式来找到第一个仅出现一次的字符
跟我前面做的一道OJ题非常类似,这道题值得称道的地方:
利用了链表进行遍历,能够减少数组遍历而产生的不必要的开销!
附上代码,在代码里面有解释:
#include <iostream>
using namespace std;
char firstSingle(char *str){
int a[255];
memset(a,0,sizeof(a));
//for(int i=0;i<255;i++) cout<<a[i]<<" ";cout<<endl;
char *p = str;
while(*p!='\0'){ //统计数据出现次数
a[*p]++;
p++;
}
p = str;
while(*p!='\0'){ //如果不是链表尾
if(a[*p]==1){ //找到第一个仅出现一次的元素
char c = *p;
return c;
}
p++;
}
//return '\0';
}
int main(){
char str[100];
cin>>str;
cout<<firstSingle(str);
return 0;
}
附上运行结果展示:
可以看出,第二行结果显示的是b,说明结果对了~