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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值