解决思路:
1、使用哈希表,hash[256],遍历一遍字符串,得到每个字符出现的次数。
2、设定一个Order数组,记录字符出现的次序,然后遍历次序数组,在hash表中找出它出现的次数,如果为1,那就找到符合要求的字符了。
比如字符串为“abccaffdde”,那么存放在order数组的字符就为order[] = {'a', 'b','c','f', 'd','e'}。
代码如下:
#include <stdio.h>
char getUniqueChar(char *pStr)
{
int i = 0;
if (NULL == pStr)
return '\0';
const int tablesize = 256;
unsigned int hashTable[tablesize] = {0};
unsigned int order[tablesize] = {0};
char pHashKey = pStr;
while(*pHashKey != '\0')
{
if (0 == hashTable[*pHashKey])
{
order[i++] = *pHashKey;
}
hashTable[*pHashKey++]++;
}
for (i=0; i<tablesize; i++)
{
if(1 == hashTable[order[i])
return order[i];
}
if (i == tablesize)
return '\0';
}
本文介绍了一种通过哈希表和顺序数组来查找给定字符串中首次出现且仅出现一次的字符的方法。首先使用哈希表统计每个字符的出现频率,接着通过顺序数组记录字符出现的先后顺序,最后在哈希表中查找符合条件的字符。
6024

被折叠的 条评论
为什么被折叠?



