利用哈希表的思想来解,首先设置一个数组保存字符串中每个字符出现的次数,第一趟遍历字符串计算出每个字符出现的次数,第二次遍历找出第一个只出现一次的字符。算法的时间复杂度为O(n)。
char FirstAppearedChar(char *str)
{
if(str == NULL) // 数据合法性检验
return '\0';
unsigned int hashTable[256] = {0}; // 保存字符串每个字符出现的次数
char *ch = str;
while(*ch != '\0')
hashTable[*(ch++)]++; // 计算字符串每个字符出现的次数
ch = str;
while(*ch != '\0')
{
if(hashTable[*ch] == 1) // 第一次出现且次数为1的字符
return *ch;
++ch;
}
return '\0'; // 未找到第一次只出现一次的字符
}