题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:这道题是2006年google的一道笔试题。
思路:这道题,我看到的时候,竟然没想到最正常的思路,就是从头到尾遍历,每遍历一个字符,就再遍历一遍字符串,看是不是当前字符在字符串中只出现了一次。。。这个思路是最正常,最直观的思路,但是它的时间复杂度为n方,比较慢。。。我这次最先想到的是,要想找到只出现一次的字符,当然我只要遍历一次,得出每个字符出现的次数,然后再遍历出第一个出现次数为一的字符就可以,其实这个思路也挺直观的。。。统计字符出现的次数,使用的方法其实可以说算是hash,需要26个空间,空间复杂度为O(1),时间复杂度为O(n)。
/*================================================================*\
第17题(字符串):
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:这道题是2006年google的一道笔试题。
\*================================================================*/
#include <iostream>
using namespace std;
char findFirst(char *index,int length){
int hashTable[26] = {0};
for(int i=0 ; i < length ; ++i){//统计每个字符出现的次数
++hashTable[index[i]-'a'];
}
for(int i=0 ; i < length ; ++i){//找出第一个出现次数为1的字符
if(1 == hashTable[index[i]-'a']){
return index[i];
}
}
return NULL;
}
int main(){
char index[] = "abaccdeff";
char ret = findFirst(index,9);
if(NULL != ret){
cout << ret << endl;
}else{
cout << "error:没有只出现过一次的字符" << endl;
}
return 1;
}