剑指offer-面试题35:第一个只出现一次的字符

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

思路:这道题目不难,遍历一遍统计每个字符出现的次数就完了。作者用的是哈希表,因为只需要统计次数,而且字符只有256中,可以用一个大小为256的数组实现。自己用STL里的multimap容器也实现了,道理完全一样。

//哈希表实现输出第一个只出现一次的字符
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';
}

//multimap实现输出第一个只出现一次的字符
char FirstNotRepeatingChar(char* pString)
{
	if(pString == NULL)
		return '\0';
		
	multimap<char, int> char_count;
	for(char* p = pString; *p != '\0'; ++p)
		char_count.insert({*p,1});
	char* key = pString;
	while(*key != '\0')
	{
		if(char_count.count(*key) == 1)
			return *key;
		++key;
	}
	
	return '\0';
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值