一开始想不明白为什么我的遍历两遍而已,就比别人的慢了。后来想,万一遇到的字符串是比较长的,那么这时候按照26个字母来检索或许平均便利次数根本不用全遍历完字符串。不过后来继续查了一下,python里的find函数本来就是返回符合要求的第一个子字符串的索引。。这个底层应该是c实现的,但是用这个find来解题,是不是应该算作弊。不过也切身体会到了,相同逻辑代码的条件下,c那些比python快在哪里。
我的256ms:
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
# letter_dic={}
# for i in s:
# if i in letter_dic:
# letter_dic[i] +=1
# else:
# letter_dic[i]=1
letter_dic=collections.Counter(s)
for i in range(len(s)):
if letter_dic[s[i]]==1:
return i
return -1
别人的50ms左右:
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
result = []
for i in string.ascii_lowercase:
if s.count(i) == 1:
result.append(s.find(i))
if len(result) > 0:
return min(result)
return -1
网友评论