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、字符串问题:是否区分大小写?是否包括其他字符?等等。
注:点击阅读原文可进入题目。
让我知道你在看