第一個值出現一次的字元
原文地址:
http://www.cnblogs.com/liuyubloch/archive/2012/08/25/2655705.html
題目:
在一個字串中找到第一個只出現一次的字元。如輸入abaccdeff,則輸出b。 分析:這道題是2006年google的一道筆試題。
分析
看到這道題時,最直觀的想法是從頭開始掃描這個字串中的每個字元。當訪問到某字元時拿這個字元和後面的每個字元相比較,如果在後面沒有發現重複的字元,則該字元就是隻出現一次的字元。如果字串有n個字元,每個字元可能與後面的O(n)個字元相比較,因此這種思路時間複雜度是O(n2)。我們試著去找一個更快的方法。
由於題目與字元出現的次數相關,我們是不是可以統計每個字元在該字串中出現的次數?要達到這個目的,我們需要 一個資料容器來存放每個字元的出現次數。在這個資料容器中可以根據字元來查詢它出現的次數,也就是說這個容器的作用是把一個字元對映成一個數字。在常用的 資料容器中,雜湊表正是這個用途。
雜湊表是一種比較複雜的資料結構。由於比較複雜,STL中沒有實現雜湊表,因此需要我們自己實現一個。但由於本題的特殊性,我們只需要一個非常簡單的雜湊表就能滿足要求。由於字元(char)是一個長度為8的資料型別,因此總共有可能256 種可能。於是我們建立一個長度為256的陣列,每個字母根據其ASCII碼值作為陣列的下標對應陣列的對應項,而陣列中儲存的是每個字元對應的次數。這樣我們就建立了一個大小為256,以字元ASCII碼為鍵值的雜湊表。(並不僅限於英文字元,所以這裡要考慮256種可能)。
我們第一遍掃描這個陣列時,每碰到一個字元,在雜湊表中找到對應的項並把出現的次數增加一次。這樣在進行第二次掃描時,就能直接從雜湊表中得到每個字元出現的次數了。
參考程式碼如下:
1 #include "stdio.h"
2 #include "string.h"
3 #include "stdlib.h"
4
5 char FirstNotRepeatingChar(char* pString)
6 {
7 //輸入不合法
8 if(!pString)
9 return0;
10
11 //建立一個雜湊表,並初始化
12 constint tableSize =256;
13 int hashTable[tableSize];
14 for(int i =0; i < tableSize; i++)
15 hashTable[i] =0;
16
17 //確定字串中每個字元出現的次數
18 char* pHashKey = pString;
19 while(*(pHashKey) !='\0')
20 hashTable[*(pHashKey++)]++;
21
22 //找到字串中只出現一次的那個字元
23 pHashKey = pString;
24 while(*pHashKey !='\0')
25 {
26 if(hashTable[*pHashKey] ==1)
27 return*pHashKey;
28 pHashKey++;
29 }
30
31 //如果這個字串為空,或者字串中的每個字元都至少出現兩次
32 return0;
33 }
34
35 int main(void)
36 {
37 char str[1000];
38 printf("請輸入字串:");
39 gets(str);
40 if(FirstNotRepeatingChar(str)==0)
41 printf("輸入字串中沒有找到第一個只出現一次的字元!\n");
42 else
43 printf("輸入字串中第一個只出現一次的字元為:%c\n",FirstNotRepeatingChar(str));
44 system("pause");
45 return0;
46 }
相關文章
- 第一個只出現一次的字元——Java字元Java
- 【劍指offer】第一個只出現一次的字元字元
- 第一次只出現一次的字元字元
- JZ-034-第一個只出現一次的字元位置字元
- 每日一練(23):第一個只出現一次的字元字元
- 在字串中,尋找第一個只出現一次的字元字串字元
- [劍指Offer]面試題35:第一個只出現一次的字元面試題字元
- (python版)《劍指Offer》JZ34:第一個只出現一次的字元Python字元
- 1.7程式設計基礎之字串02:找第一個只出現一次的字元程式設計字串字元
- 字元流中第一個不重複的字元字元
- [演算法練習及思路-leetcode劍指offer(Java解法)]No50.第一個只出現一次的字元演算法LeetCodeJava字元
- javascript獲取指定元素第一次出現的位置JavaScript
- 劍指Offer 字元流中第一個不重複的字元字元
- js刪除字串的第一個字元JS字串字元
- 如何計算字串某個字元出現的次數字串字元
- 統計字串中某個字元出現的次數字串字元
- 2351. 第一次出現兩次的字母
- js如何查詢字元處中第一個不重複的字元JS字元
- 《劍指offer》:[55]字元流中第一個不重複的字元字元
- js 字串中取得第一個字元和最後一個字元JS字串字元
- 利用HashMap統計字串各個字元出現的次數HashMap字串字元
- 獲得String字串中某個字元出現的次數字串字元
- 一個字串中某一個字元第n次出現的位置的函式字串字元函式
- 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。陣列
- python 統計字串裡某個字元出現的次數count()Python字串字元
- Python字串刪除第一個字元常用的方法!Python字串字元
- JavaScript統計字元出現的次數JavaScript字元
- Dictionary計算字元出現的次數字元
- 輸出儲存在記憶體中的字串(迴圈輸出每一個的字元和一次性全部輸出)記憶體字串字元
- JavaScript 字元逐個輸出效果JavaScript字元
- 字元輸出流_Writer類&FileWriter類介紹和字元輸出流的基本使用_寫出單個字元到檔案字元
- jquery如何獲取指定元素在陣列中第一次出現的位置jQuery陣列
- [演算法]求母音字母在單詞中第一次出現的位置.演算法
- css如何設定字串中第一個字元的樣式CSS字串字元
- 查詢字串中連續出現的字元字串字元
- 31:字串中最長的連續出現的字元字串字元
- Java實現第一個程式碼,輸出 hello worldJava
- 集合框架-統計字串中每個字元出現的次數案例圖解框架字串字元圖解