第一次只出現一次的字符

      最近在準備工作的面試,看到2006年google的一條面試題:“在一個字符串中找到第一個只出現一次的字符,比如輸入abaccdef,則輸出b”。大家可能覺得用哈希表好,但哈希表數據結構複雜,而且標準庫中沒有哈希表的頭文件,所以我用標準庫中的map實現該算法。

      程序的大體思路是:

      (1)將字符與出現的序號配對,若出現第二次(通過與之配對的序號判斷),直接將字符的配對序號置爲大數;

      (2)用map的迭代器檢索最小的的序號,返回相應的字符。

       代碼如下:


運行結果見下圖:


          算法第一步的複雜度與輸入字符串的長度N相關,爲O(N),第二步的複雜度與輸入字符串集的大小M(即輸入字符的種類)相關,爲O(M)。顯見M<=N,(N較大時,M<<N),所以算法複雜度爲O(N)。 

       C++標準庫是很強大的,要好好學習^_^



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