【题目2】给定一个字符串数组,从中找出第一个只出现一次的字母

这篇博客讲述了如何解决寻找字符串中第一个只出现一次的字母的问题。作者通过创建哈希表记录字符出现的次数和位置,最终找到第一个出现次数为一的字符。文章提供了两种解决方案,一种是自定义哈希表结构,另一种是使用标准库的哈希表,并给出了相应的C++代码实现。

    这个题目看似简单,把代码调试通过花了我两个多小时

唉,越做对自己越没信心,看来要再把数据结构复习一遍了。

    解题思路:利用哈希表,因为字符最多只有255个,可以

利用这个特性建立一个哈希表,将字符串中所有的字符映射到

这个哈希表中,记录出现的每个字符的个数。最后查找哈希表

获取第一个出现字数为一的字母。

  这里有一个问题,我们如何知道我们取到的是字符串中的第一

个出现一次的字母,这里要求我们在映射字符的时候,顺便将其

第一次出现的位置记录到哈希表结构中去。位置最靠前的当然就

是第一个只出现一次的字母了。

 

  在实现过程中,可以自己实现一个定制的哈希表结构,但是

我嫌太麻烦了,就利用了一些个小技巧,利用一个Set来记录

出现了那些字符,在定义一个结构体记录每个字符出现的次数和

首次在字符串中出现的位置。

  

源代码:(在VC6下通过编译,正确执行)

  

2009/9/20

发现自己对哈希表的理解还不正确,在网上找到一个比较好的解法

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值