第一次只出现一次的字符

      最近在准备工作的面试,看到2006年google的一条面试题:“在一个字符串中找到第一个只出现一次的字符,比如输入abaccdef,则输出b”。大家可能觉得用哈希表好,但哈希表数据结构复杂,而且标准库中没有哈希表的头文件,所以我用标准库中的map实现该算法。

      程序的大体思路是:

      (1)将字符与出现的序号配对,若出现第二次(通过与之配对的序号判断),直接将字符的配对序号置为大数;

      (2)用map的迭代器检索最小的的序号,返回相应的字符。

       代码如下:


运行结果见下图:


          算法第一步的复杂度与输入字符串的长度N相关,为O(N),第二步的复杂度与输入字符串集的大小M(即输入字符的种类)相关,为O(M)。显见M<=N,(N较大时,M<<N),所以算法复杂度为O(N)。 

       C++标准库是很强大的,要好好学习^_^



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章