题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。
思路1:如果检测每一个字符的时候,都将字符串从头到尾扫描一遍,则需要时间复杂度为O(n^2),效率太低。
思路2:利用哈希表的思想。统计字符串中每个字符出现的次数。
定义哈希表的键值(key)是所有字符(char类型有256种可能),定义实值(value)为该字符出现的次数。
从头到尾扫描字符串,每扫描一个字符,就映射到哈希表上去。时间复杂度为O(n)。
第二次扫描字符串,找到每个字符对应哈希表的实值,第一个实值为1的字符就是我们要找的字符。
char findChar(char *s)
{
if(s == NULL)
return 0;
int hashTable[255];
for(int i = 0; i < 255; i++)
hashTable[i] = 0;
int i = 0;
while(s[i] != 0)
{
hashTable[s[i]]++;
i++;
}
int j = 0;
while(s[j] != 0)
{
if(hashTable[s[j]] == 1)
return s[j];
j++;
}
return 0;
}