首页 > 其他 > 详细

第一个只出现一次的字符

时间:2014-12-05 19:35:24      阅读:346      评论:0      收藏:0      [点我收藏+]

题目:在字符串中找到第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。

分析:最直观解法,从头扫描这个字符串中的每个字符。当访问到某个字符时拿这个字符和后面的每个字符比较,如果在后面没有发现重复字符,则该字符就是只出现一次的字符。这种方法的时间复杂度为O(n2)。当然我们应该有更快的方法:利用哈希表的key和value,key是字符,value是次数。这样就只需要扫描字符串两次就可以。这里我们用每个字母的ASCII码值作为数组下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。实现如下:

char FirstNotRepeatingChar(char* pString)
{
    if(pString==NULL)
        return ‘\0‘;
        
    const int tableSize=256;
    unsigned int hashTable[tableSize];
    for(unsigned int i=0;i<tableSize;++i)
        hashTable[i]=0;
    
    char* pHashKey=pString;
    while(*(pHashKey)!=‘\0‘)
        hashTable[*(pHashKey++)]++;
        
    pHashKey=pString;
    while(*pHashKey!=‘\0‘)
    {    
        if(hashTable[*pHashKey]==1)
            return *pHashKey;
        
        pHashKey++;
    }
    
    return ‘\0‘;
    
}


本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1586674

第一个只出现一次的字符

原文:http://secondscript.blog.51cto.com/9370042/1586674

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!