《劍指offer》:[55]字元流中第一個不重複的字元
題目:請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。
此題和[35]中找字串中第一次出現一次的字元是類似的。所以詳細過程這裡不再贅述。
方案一:順序掃描。時間複雜度O(N*N)+空間複雜度O(N)。順序掃描後,記錄每一個字元出現的次數。然後順序掃描陣列得到第一個次數為1對應的字元。
方案二:雜湊表法。時間複雜度O(N)+空間複雜度0(N)-雜湊表。前面講到的[35]中的的方法是:用雜湊表記錄每一個字元的次數,利用ASCII作為雜湊表的鍵值,而把字元出現的次數作為雜湊表的值。此題中也是用雜湊表來記錄,ASCII作為雜湊表的鍵值,把字元對應的位置,也可理解為下標作為雜湊表的值。例如陣列初始化為-1,第一個出現的字元就是0,第二個出現就是1...一次類推,如果再次出現則設定為-2,最後查詢的時候,尋找第一個等於0的數。
下面的程式碼主要是用字串來模擬的字元流操作。
具體實現程式碼為:
此題和[35]中找字串中第一次出現一次的字元是類似的。所以詳細過程這裡不再贅述。
方案一:順序掃描。時間複雜度O(N*N)+空間複雜度O(N)。順序掃描後,記錄每一個字元出現的次數。然後順序掃描陣列得到第一個次數為1對應的字元。
方案二:雜湊表法。時間複雜度O(N)+空間複雜度0(N)-雜湊表。前面講到的[35]中的的方法是:用雜湊表記錄每一個字元的次數,利用ASCII作為雜湊表的鍵值,而把字元出現的次數作為雜湊表的值。此題中也是用雜湊表來記錄,ASCII作為雜湊表的鍵值,把字元對應的位置,也可理解為下標作為雜湊表的值。例如陣列初始化為-1,第一個出現的字元就是0,第二個出現就是1...一次類推,如果再次出現則設定為-2,最後查詢的時候,尋找第一個等於0的數。
下面的程式碼主要是用字串來模擬的字元流操作。
具體實現程式碼為:
#include <iostream>
using namespace std;
int index=0;
int Occurrence[256];
void ReSet()
{
for(int i=0;i<256;i++)
Occurrence[i]=-1;
index=1;
}
void InSert(char *str)
{
while(*str!='\0')
{
if(Occurrence[*str]==-1)
Occurrence[*str]=index;//第一次出現;
else if(Occurrence[*str]>=0)
Occurrence[*str]=2;//在此出現;
str++;
}
}
char FirstApperance(char *str)
{
char ch='\0';
while(*str!='\0')
{
if(Occurrence[*str]==1)
{
ch=*str;
return ch;
}
str++;
}
return ch;
}
int main()
{
char *strr[3]={"abcdabc","abcabc","abc"};
for(int i=0;i<3;i++)
{
ReSet();
InSert(strr[i]);//讀入字元;
char result=FirstApperance(strr[i]);
if(result !='\0')
cout<<strr[i]<<": 第一次出現一次的字元是:"<<result<<endl;
else
cout<<strr[i]<<": 該字串裡沒有出現一次的字元!"<<endl;
}
system("pause");
return 0;
}
執行結果:
相關文章
- 劍指Offer 字元流中第一個不重複的字元字元
- 字元流中第一個不重複的字元字元
- js如何查詢字元處中第一個不重複的字元JS字元
- 【劍指offer】第一個只出現一次的字元字元
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- [劍指Offer]面試題35:第一個只出現一次的字元面試題字元
- 【劍指offer】刪除在另一個字串中出現的字元字串字元
- javascript獲取字串中第一個不重複字元程式碼例項JavaScript字串字元
- (python版)《劍指Offer》JZ34:第一個只出現一次的字元Python字元
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 《劍指offer》:[64]資料流中的中位數
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 劍指Offer--陣列中重複的數字陣列
- 《劍指offer》:[51]陣列中的重複數字陣列
- js 字串中取得第一個字元和最後一個字元JS字串字元
- JavaScript隨機不重複的字元組成新的字串JavaScript隨機字元字串
- [演算法練習及思路-leetcode劍指offer(Java解法)]No50.第一個只出現一次的字元演算法LeetCodeJava字元
- 劍指 offer 第一題: 二維陣列中的查詢陣列
- 查詢字串中第一個非重複字元的3種方法字串字元
- 【劍指offer】二進位制中1的個數
- 【劍指offer】陣列中的逆序對陣列
- 【劍指offer】替換字串中的空格字串
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- 【劍指offer】字串的排列字串
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 《劍指offer》:[66]矩陣中的路徑矩陣
- JavaScript統計字串中重複字元的個數JavaScript字串字元
- 劍指 Offer 15. 二進位制中1的個數
- IO 字元流字元
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 【劍指offer】二維陣列中的查詢陣列
- 檔案的複製通過字元流和緩衝流(Buffered)字元
- (字串雜湊表)找到字串中不重複出現字元的最長子串長度字串字元
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】左旋轉字串字串
- 劍指Offer題解合集