解法一:掃兩遍,第一遍存字典,第二遍遍歷字典找到最小索引,**如下:
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...