利用哈希表的思想来解,首先设置一个数组保存字符串中每个字符出现的次数,第一趟遍历字符串计算出每个字符出现的次数,第二次遍历找出第一个只出现一次的字符。算法的时间复杂度为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'; // 未找到第一次只出现一次的字符 }