思路:普通思路就是先看第一个元素,遍历字符串看看每个字符总共在字符串中出现的次数,但是这是一个时间复杂度O(N)的算法,牛客上面是肯定跑不过的,所以我们可以想到用什么东西可以达到记录字符出现次数时间复杂度有符合要求的呢?
哈希表
这里是一个字符串,每个字符的取值范围不可能超过256,我们可以直接将哈希表定义出来并且初始化为全0,然后对应字符的ASCII存放在字符串中出现的次数,后面就可以遍历哈希表来确定哪一个字符是字符串中只出现一次的,由于我们是根据str[i]来遍历就可以保证遍历的时候就是按照原字符串中字符出现的先后顺序来的,一旦遇到hashtable[str[i]]==1,就直接返回
#include<iostream>
using namespace std;
#include<string>
#include<assert.h>
char FindFirst(string str){
assert(str.size() > 0);
int hashtable[256] = { 0 };
int i = 0;
for ( i = 0; i < str.size(); i++){
hashtable[str[i]]++;
}
for (i = 0; i< str.size(); i++){
if (hashtable[str[i]] == 1){
return str[i];
}
}
return 0;
}
int main(){
string str = "qabcdfabcde";
char ret = FindFirst(str);
cout << ret << endl;
system("pause");
return 0;
}