請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。最簡單的想法,用字串如果當前字元流沒有存在出現一次的字元,返回#字元。
str
記錄字元流中的每乙個字元ch
,同時利用乙個陣列hash
記錄每乙個字元ch
對應出現的次數,即hash[ch]
,直至字元流中的所有字元被讀取。然後,按照str
中的字元順序,遍歷hash
,找到第乙個等於只出現一次的字元,即第乙個hash[ch]=1
對應的字元ch
,返回。若沒有存在出現一次的字元,則返回#
。
注:標準ascii共有128個字元,還有128個擴充套件ascii以表示特殊符號字元、外來語字元和圖形符號。在這題裡,hash的大小設為128即可滿足題意。
說明:class solution
; //insert one char from stringstream
void insert(char ch)
}return '#';}};
方法2中使用了雙向開口的for(char ch:str)
//相當於
char ch;
for(int i=0;i這是借鑑討論區的方法。
思路:1、用乙個128大小的陣列統計每個字元出現的次數
2、用乙個佇列,如果第一次遇到ch
字元,則插入佇列;其他情況不在插入
3、判斷隊首元素是否只出現一次,如果是,直接返回;否則刪除首元素,繼續第3步驟
class solution
}if( data.empty() )
return '#';
return data.front();
}private:
unsigned char hasharray[128];
dequedata;
};
deque
隊容器,也就是可以在佇列的頭尾兩端分別做元素的插入和刪除操作。vector
是單向的隊容器,若要在頭部插入元素,則效率很低。
deque
和vector
容器的差異有:
(1)deque
可以以常數項實踐對頭部進行元素的插入和刪除操作;vector
不行,服從先進先出 (fifo) 原則。
(2)deque
隨時可以增加一段新的空間,是由動態的分段連續空間組成的;vector
如果空間不足,則要重新配置一塊更大的空間,將原來的元素複製到新的空間中,然後釋放原來的空間。
(3)deque
的迭代器不是普通的指標,運算會較為複雜,不常用。
關於deque
的一些常用操作:
參考://初始化
dequedeqt;//預設構造形式
// 大小操作
deqt.size();//返回容器中元素的個數
deqt.empty();//判斷容器是否為空
//資料的訪問
deqt.at(idx);//返回索引idx所指的資料
deqt.front();//返回第乙個資料。
deqt.back();//返回最後乙個資料
//雙端的插入和刪除
deqt.push_back(elem);//在容器尾部新增乙個資料
deqt.push_front(elem);//在容器頭部插入乙個資料
deqt.pop_back();//刪除容器最後乙個資料
deqt.pop_front();//刪除容器第乙個資料
//插入操作
deqt.insert(pos,elem);//在pos位置插入乙個elem元素的拷貝,返回新資料的位置。
deqt.insert(pos,n,elem);//在pos位置插入n個elem資料,無返回值。
//刪除操作
deqt.clear();//刪除所有資料
deqt.erase(beg,end);//刪除[beg,end)的資料,返回下乙個資料的位置。
deqt.erase(pos);//刪除pos位置的資料,返回下乙個資料的位置。
[1]:
[2]:
劍指offer 字元流中第乙個不重複的字元
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 8 題目描述 請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元 go 時,第乙個只出現一次的字元是 g 當從該字元流中讀出前六個字元 google 時,第乙個只出現一次的字元是 l 輸出描述 ...
劍指Offer 字元流中第乙個不重複的字元
題目描述 請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元 go 時,第乙個只出現一次的字元是 g 當從字元流中讀出字元 google 時,第乙個只出現一次的字元是 l 解析 字元只能乙個接著乙個從字元流中讀出來。可以定義乙個資料容器來儲存字元在字元流中的位置...
劍指offer 字元流中第乙個不重複的字元
請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元 go 時,第乙個只出現一次的字元是 g 當從該字元流中讀出前六個字元 google 時,第乙個只出現一次的字元是 l 輸出描述 如果當前字元流沒有存在出現一次的字元,返回 字元。我的思路是用乙個陣列儲存每個字元...