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

2021-09-11 03:15:48 字數 1525 閱讀 1173

在字串中找到第乙個只出現一次的字元。

例:

輸入"abaccdeff",則輸出』b』。

遍歷字串,每個字母第一次出現時將字母作為key,index作為val存入字典,當在字典中有key時,則將val改寫為-1,表示出現2次以上。遍歷字串結束後,遍歷字典,輸出位置最小的字元。

時間複雜度:o(n)

空間複雜度:o(1)

def

first_not_repeating_char

(string)

:"""

:param string: string

"""alphabet =

for i in

range

(len

(string)):

if string[i]

in alphabet:

alphabet[string[i]]=

-1else

: alphabet[string[i]

]= i

first =

float

('inf'

) res =

none

for key in alphabet:

val = alphabet[key]

if val !=-1

and val < first:

first = val

res = key

return res

在字元流中找到第乙個只出現一次的字元。

例:

輸入"abaccdeff",則輸出』b』。

同問題1,只是每進入乙個字母就更新一次結果。

def

first_not_repeating_char

(string)

:"""

:param string: string stream

"""alphabet =

for i in

range

(len

(string)):

if string[i]

in alphabet:

alphabet[string[i]]=

-1else

: alphabet[string[i]

]= i

first =

float

('inf'

) res =

none

for key in alphabet:

val = alphabet[key]

if val !=-1

and val < first:

first = val

res = key

print

(res)

return

是否可以有一種方法不需要掃瞄整個輔助陣列來得到最新的結果?用乙個按位置排序的佇列?

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

class solution for auto c s for auto c s return 自己寫的 劣勢在於使用集合而不是對映,因此無法存對應字元出現的次數,因此當insert乙個重複字元時,它可能是所求的目標字元,也可能是後面的,例如google,insert第二個o時,當前所求的目標字元 ...

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

劍指offer 50.第乙個只出現一次的字元 edited by ryunin date 2019 05 06 include include needed using namespace std using namespace gnu cxx needed class solution else ...

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

解法一 利用hashmap 1.如果s為空或者長度為0,返回 2.將s轉化為陣列,然後將陣列中元素分別放入hashmap中,key表示字元,value表示個數 3.然後判斷字元對應的個數是否為1,若為1直接返回 class solution char str s.tochararray hashma...