昨天看到一个面试题,说是要在一个字符串中找到第一个不重复的字符。
初始思路如下:
扫描一遍字符串,生成一个链表,越早出现的字符越靠近链表头,最后出现的在链表尾。每次从字符串中扫描到一个字符后,在链表中搜索,找到则其计数加一,否则加入到链表尾。最后遍历这个链表,第一个出现次数为1的就是第一个不重复的字符。
改进后方法:
考虑到如果字符串很长,每次需要去链表中查询是否有此字符,因此设计一个索引Index[26]对应26个英文字母,此索引元素是指向链表节点的指针。每次判断扫描的字符是否存在时,直接看Index[m]是否为NULL,是则将其加入到链表尾,同时位置赋值给此索引。反之,直接自加一。
编译平台:Redhat AS 5(kernel 2.6.18) gcc 4.1.1版本
程序不足之处:假设了字符串是26个英文小写字母组成。
/*
* ==========================&