在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
题目很简单
用一个int 数组,全部初始化为-1.
遍历字符串,如果值为-1,就将值改为字符串的下标,否则设为-2
然后再扫描一遍这个数组,找到大于等于0并且最小值即可
有一种方法只要扫描一遍。
GetFirstOnce(const char* szString)
{
assert(NULL != szString);
int ChrToFreq[256];
memset(ChrToFreq, 0, sizeof(ChrToFreq));
char OrderToChr[256];//记录字符第一次出现的次序
memset(OrderToChr, 0, sizeof(OrderToChr));
int nIter = 0;
int nRet = 0;//指向至今为止,第一次只出现一次的字符
while (0 != *szString)
{
ChrToFreq[*szString]++;
if (1 == ChrToFreq[*szString])
OrderToChr[nIter++] = *szString;
while(nRet < nIter && ChrToFreq[OrderToChr[nRet]] > 1) nRet++;
szString++;
}
if (nRet == nIter) return 0;
return OrderToChr[nRet];
}