找出字符串中第一个不重复的字母

本文介绍了一个面试问题,即如何在一个字符串中找到第一个不重复的字符。最初的方法是通过创建链表,记录字符出现的顺序,然后遍历链表找首次出现的字符。改进方法使用索引数组,提高查询效率。程序适用于Redhat AS 5系统,基于gcc 4.1.1编译。
摘要由CSDN通过智能技术生成

昨天看到一个面试题,说是要在一个字符串中找到第一个不重复的字符。

初始思路如下:

扫描一遍字符串,生成一个链表,越早出现的字符越靠近链表头,最后出现的在链表尾。每次从字符串中扫描到一个字符后,在链表中搜索,找到则其计数加一,否则加入到链表尾。最后遍历这个链表,第一个出现次数为1的就是第一个不重复的字符。

改进后方法:

考虑到如果字符串很长,每次需要去链表中查询是否有此字符,因此设计一个索引Index[26]对应26个英文字母,此索引元素是指向链表节点的指针。每次判断扫描的字符是否存在时,直接看Index[m]是否为NULL,是则将其加入到链表尾,同时位置赋值给此索引。反之,直接自加一。

编译平台:Redhat AS 5(kernel 2.6.18) gcc 4.1.1版本

程序不足之处:假设了字符串是26个英文小写字母组成。

/*
 * ==========================&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值