在字符串中找出第一个只出现一次的字符。如果输入”abcdafkkim", 则输出'b'.
字符char类型只占一个字节,共8bit,因此字符总共有256中可能。所以我们可以创建一个长度为256的数组,每个字母根据其ASCII值作为数组的下标,该下标对应的数组元素记录该字母在字符串中出现的次数。这样我们就创建了一个大小为256,以字符ASCII码为键值的哈希表。
总共需要遍历两次字符串,第一次遍历是为了统计字符串中每个字符出现的次数,第二次遍历根据已统计的字符出现次数得到第一次只出现一次的字符。
代码如下:
#include <stdlib.h>
#include <stdio.h>
char firstNotRepeatingChar(char *pString)
{
if(pString == NULL)
return '\0';
const int tableSize = 256;
unsigned int hashTable[tableSize];
for(int i = 0; i < tableSize; ++ i)
hashTable[i] = 0;
char *pKey = pString;
while((*pKey) != '\0') {
hashTable[*pKey]++;
++pKey;
}
pKey = pString;
while((*pKey) != '\0') {
if (hashTable[*pKey] == 1)
return *pKey;
++pKey;
}
return '\0';
}
int main()
{
char *string = "adkfjadkfjjdkaf";
char firstChar = firstNotRepeatingChar(string);
printf("firstChar is %c\n", firstChar);
return 0;
}
上述代码需要注意的情况:
1. 当字符串为空时,pString == NULL
2. 当字符串中没有第一个只出现一次的字符时记得返回 ‘\0'
3. hashTable的初始化为0