天天看點

02-leetcode: explore-strings-34 字元串中的第一個唯一字元

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、字元串問題:是否區分大小寫?是否包括其他字元?等等。

注:點選閱讀原文可進入題目。

讓我知道你在看