劍指offer 字元流中第乙個不重複的字元

2021-10-02 05:59:18 字數 2409 閱讀 7288

請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"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 '#';}};

說明:

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;

};

方法2中使用了雙向開口的deque隊容器,也就是可以在佇列的頭尾兩端分別做元素的插入和刪除操作。vector是單向的隊容器,若要在頭部插入元素,則效率很低。

dequevector容器的差異有:

(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 輸出描述 如果當前字元流沒有存在出現一次的字元,返回 字元。我的思路是用乙個陣列儲存每個字元...