找出第一个只出现一次的字符

来源:互联网 发布:博洋挂机软件 编辑:程序博客网 时间:2024/05/22 09:42

在一个字符串中找到第一个只出现一次的字符。如输入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];}


原创粉丝点击