劍指OFFER 第乙個只出現一次的字元

2021-09-25 08:37:34 字數 707 閱讀 1751

題目:查詢出字串中只出現一次的字元

在乙個字串(0<=字串長度<=10000,全部由字母組成)中找到第乙個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).

解:這道題可以用雜湊表。第一次掃瞄把字串裡的所有字元按順序對映到雜湊表中,並記錄下出現次數。第二次掃瞄字串,按順序查詢字元在雜湊表中記錄的次數,就可以找到第乙個只出現一次的字元了。

因為字元可以對應ascii碼,而乙個字元佔據8個bit的空間,一共有256種可能。因此可以建立乙個長度為256的陣列,陣列的下標對應字元的ascii碼,也就與字元對應起來了。弄清楚步驟後,以下是**。

int

firstnotrepeatingchar

(string str)

for(

int i =

0; i < size; i++

)for

(int i =

0; i < size; i++

)return-1

;}

**也比較簡單,首先建立乙個長度為256的整形陣列並初始化為0。

之後第一次遍歷字串,將字元對應的陣列下標加1。

最後第二次遍歷字串,檢查字元對應的陣列下標是否等於1,如果是的話可以立即返回該下標。

本法建立了乙個大小為256的整形陣列,因此空間複雜度為o(1)。需要遍歷字串兩邊,因此時間複雜度是o(n)

劍指offer 第乙個只出現一次的字元

在乙個字串 1 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置 我們遍歷這個字串,假設每個當前字元都是只出現一次的,我們分別向前和向後考察是否存在相同字元 向前考察 儲存乙個vector裡面存放所有已知的已經重複過的字元,如果當前字元跟這個vector裡面的字元相...

劍指offer 第乙個只出現一次的字元

在乙個字串 0 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置,如果沒有則返回 1.將字串轉化成陣列,兩個迴圈,外層迴圈遍歷這個陣列i,內層迴圈也是從0 開始遍歷j,判斷i對應的元素和j對應的元素是否相等,相等的話就說明不是要求的位置,直接開始判斷下乙個元素i p...

劍指offer 第乙個只出現一次的字元

在乙個字串 0 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置,如果沒有則返回 1 需要區分大小寫 我的思路 第一次遍歷string,用乙個map記錄每個字元出現的次數 第二次遍歷map,找到次數為1的字元 第三次遍歷string,找到該字元出現的位置。問題 ma...