程式設計師面試題精選 06 第乙個只出現一次的字元

2021-09-30 05:57:06 字數 717 閱讀 5253

題目:在乙個字串中找到第乙個只出現一次的字元。如輸入abaccdeff,則輸出b。

分析:這道題是2023年google的一道筆試題。

看到這道題時,最直觀的想法是從頭開始掃瞄這個字串中的每個字元。當訪問到某字元時拿這個字元和後面的每個字元相比較,如果在後面沒有發現重複的字元,則該字元就是只出現一次的字元。如果字串有n個字元,每個字元可能與後面的o(n)個字元相比較,因此這種思路時間複雜度是o(n2)。我們試著去找乙個更快的方法。

由於題目與字元出現的次數相關,我們是不是可以統計每個字元在該字串**現的次數?要達到這個目的,我們需要乙個資料容器來存放每個字元的出現次數。在這個資料容器中可以根據字元來查詢它出現的次數,也就是說這個容器的作用是把乙個字元對映成乙個數字。在常用的資料容器中,雜湊表正是這個用途。

雜湊表是一種比較複雜的資料結構。由於比較複雜,stl中沒有實現雜湊表,因此需要我們自己實現乙個。但由於本題的特殊性,我們只需要乙個非常簡單的雜湊表就能滿足要求。由於字元(char)是乙個長度為8的資料型別,因此總共有可能256 種可能。於是我們建立乙個長度為256的陣列,每個字母根據其ascii碼值作為陣列的下標對應陣列的對應項,而陣列中儲存的是每個字元對應的次數。這樣我們就建立了乙個大小為256,以字元ascii碼為鍵值的雜湊表。

我們第一遍掃瞄這個陣列時,每碰到乙個字元,在雜湊表中找到對應的項並把出現的次數增加一次。這樣在進行第二次掃瞄時,就能直接從雜湊表中得到每個字元出現的次數了。

示例**如下:

程式設計師面試題精選 13 第乙個只出現一次的字元

題目 在乙個字串中找到第乙個只出現一次的字元。如輸入abaccdeff,則輸出b。分析 這道題是2006年google的一道筆試題。看到這道題時,最直觀的想法是從頭開始掃瞄這個字串中的每個字元。當訪問到某字元時拿這個字元和後面的每個字元相比較,如果在後面沒有發現重複的字元,則該字元就是只出現一次的字...

程式設計師面試題精選

問題描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。問題分析 這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字...

程式設計師面試題精選 找出兩個鍊錶的第乙個公共節點

問題描述 給定兩個單向鍊錶,找出它們的第乙個公共節點。鍊錶的節點定義如下 struct listnode int m nkey listnode m pnext 問題分析 這是一道微軟的面試題。微軟非常喜歡與鍊錶相關的題目,因此在微軟的面試題中,鍊錶出現的概率非常高。如果兩個單向鍊錶有公共的節點,也...