leetcode 387 掃瞄 延遲刪除

2021-10-12 16:43:50 字數 1138 閱讀 2562

解法一:掃兩遍,第一遍存字典,第二遍遍歷字典找到最小索引,**如下:

class

solution

:def

firstuniqchar

(self, s:

str)

->

int:

d =for i, c in

enumerate

(s):

if c in d:

d[c]

=len

(s)else

: d[c]

= i mi =

len(s)

for c in d:

if d[c]

< mi: mi = d[c]

if mi ==

len(s)

:return-1

return mi

解法二:延遲刪除

這是一種不錯的思路,假如第乙個就是我們要的元素,第二遍掃瞄就沒必要進行了,這是我們的核心思想,不掃沒必要的地方。做法就是存乙個佇列,只有首元素涼了,才有必要繼續往下刪。

from collections import deque

class

solution

:def

firstuniqchar

(self, s:

str)

->

int:

q = deque(

) d =

for i, c in

enumerate

(s):

if c in d:

d[c]

=len

(s)while

len(q)

and d[q[0]

]==len(s)

: q.popleft(

)else

: d[c]

= iif

len(q)==0

:return-1

return d[q[0]

]

速度有沒有變快不好說,但思路是個不錯的思路。但在一些情況下,確實能提公升檢索速度。

LeetCode387 字串中的第乙個唯一字元

給定乙個字串,找到它的第乙個不重複的字元,並返回它的索引。如果不存在,則返回 1。案例 s leetcode 返回 0.s loveleetcode 返回 2.注意事項 您可以假定該字串只包含小寫字母。思路 雜湊?利用陣列下標記錄字母出現次數,另外建立乙個臨時陣列記錄各個字元首次出現的位置 int ...

leetcode387 字串中的第乙個唯一字元

給定乙個字串,找到它的第乙個不重複的字元,並返回它的索引。如果不存在,則返回 1。案例 s leetcode 返回 0.s loveleetcode 返回 2.注意事項 您可以假定該字串只包含小寫字母。整體思路還是先統計然後查詢。第一步 新建乙個長度為26的陣列,存放字母a z出現的次數,然後遍歷字...

leetcode 387 字串中第乙個唯一字元

給定乙個字串,找到它的第乙個不重複的字元,並返回它的索引。如果不存在,則返回 1。案例 s leetcode 返回 0.s loveleetcode 返回 2.注意事項 您可以假定該字串只包含小寫字母 class solution object def firstuniqchar self,s ty...