题目描述:在字符串中找出第一个只出现一次的字符。如输入”abaccdeff”; 则输出b。
解题思路:
- 使用哈希表将字符保存为键,而值是该字符出现的次数。
- 需扫描字符串两次,第一次扫描字符串时,每扫描到一个字符就在哈希表的对应项中把次数加1.
- 第二次扫描时,每扫描到一个字符就能从哈希表中得到该字符出现的次数。
测试用例:
int main(){
//输入字符串
char str[10] = "abaccdeff";
std::cout << FirstNotRepeatingChar(str); //Output: b
return 0;
}
函数实现:
char FirstNotRepeatingChar(char *str){
if(str == NULL)
return '\0';
//共有256个字符
const int tableSize = 256;
//保存字符的哈希表
unsigned int hashTable[tableSize];
//全部初始化为0此
for(int i = 0; i < tableSize; ++i)
hashTable[i] = 0;
char *hashKey = str;
//第一次扫描
while(*hashKey != '\0')
hashTable[*(hashKey++)]++; //对应字符下标递增
//第二次扫描
hashKey = str;
while(*hashKey != '\0'){
if(hashTable[*hashKey] == 1)
return *hashKey;
hashKey++;
}
return '\0';
}