LeetCode初級算法--字符串02:字符串中的第一個(gè)唯一字符
搜索微信公眾號:'AI-ming3526'或者'計(jì)算機(jī)視覺這件小事' 獲取更多算法、機(jī)器學(xué)習(xí)干貨
csdn:https://blog.csdn.net/baidu_31657889/
csdn:https://blog.csdn.net/abcgkj/
github:https://github.com/aimi-cn/AILearners
一州丹、引子
這是由LeetCode官方推出的的經(jīng)典面試題目清單~
這個(gè)模塊對應(yīng)的是探索的初級算法~旨在幫助入門算法董虱。我們第一遍刷的是leetcode推薦的題目。
查看完整的劍指Offer算法題解析請點(diǎn)擊github鏈接:
github地址
二徽惋、題目
給定一個(gè)字符串课梳,找到它的第一個(gè)不重復(fù)的字符,并返回它的索引芜果。如果不存在,則返回 -1融师。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
1右钾、思路
首先我們可以想到這道題需要的是一個(gè)不重復(fù)的字符,我們順序找到第一個(gè)不重復(fù)的字符,把其索引存起來舀射,返回最小的索引也就是第一個(gè)不重復(fù)的字符了窘茁。
注:使用count方法,會增加時(shí)間復(fù)雜度脆烟,所以我們用字典記錄各字符的索引山林。如果重復(fù)出現(xiàn),則索引值需要加上len(s)邢羔,小于len(s)的那個(gè)索引就是我們求的值驼抹。
2、編程實(shí)現(xiàn)
python
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
#算法超時(shí)
# res = []
# for i in s:
# if s.count(i) == 1:
# res.append(s.index(i))
# if len(res):
# return min(res)
# return -1
# 用字典記錄各字符的索引拜鹤。如果重復(fù)出現(xiàn)框冀,則索引值需要加上len(s)
d = {}
for i in range(len(s)):
if s[i] not in d:
d[s[i]] = i
else:
d[s[i]] += len(s)
if len(s) and min(d.values()) < len(s) :
return min(d.values())
return -1
AIMI-CN AI學(xué)習(xí)交流群【1015286623】 獲取更多AI資料
分享技術(shù),樂享生活:我們的公眾號計(jì)算機(jī)視覺這件小事每周推送“AI”系列資訊類文章敏簿,歡迎您的關(guān)注明也!
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!