leetcode explore 字元串類第三題:字元串中的第一個唯一字元。
題目分析
這裡把題目貼出來:
Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode"
return 0.
s = "loveleetcode",
return 2.
Note: You may assume the string contain only lowercase letters.
複制
題意拆解:
1、輸入:字元串
2、輸出:整數,這個整數的含義是字元串中第一個不重複字元的下标,如果不存在,傳回-1
3、注意:我們假定輸入的字元串中中包含小寫的字母(從注意事事項中,我們可以看到平常面試中,我們應該考慮到的細節問題)
參考答案
對于可疊代對象判斷重複,下意識要想到這幾個點:
1、set() 和 dict() 可用于去重
2、dict() 用于判斷 key 是否存在效率很高
隻要想到上面兩點,加上題目對空間和時間複雜度要求也不高,解題就很容易了,參考答案如下:
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return -1
d = {}
for i in range(len(s)):
if d.get(s[i]):
continue
if s.count(s[i]) > 1:
d[s[i]] = 1
continue
return i
return -1
複制
總結
題目本身并不難,但是我們看到每次題目都會有一些假設條件,這些條件一般是用來規範輸入和輸出的。但是在實際面試中,這些可能反而會成為面試官的考試點,他并不會給出這些假設條件,如果你能主動去詢問,會給你加分。
通常要注意的點:
1、數值問題:數值的範圍,是否會超限。一般 Python 數值是不會超限,但如果是其他語言需要注意,同時也可以像面試官确認數值範圍。
2、字元串問題:是否區分大小寫?是否包括其他字元?等等。
注:點選閱讀原文可進入題目。
讓我知道你在看