LeetCode初級算法--字符串02:字符串中的第一個惟一字符

LeetCode初級算法--字符串02:字符串中的第一個惟一字符

搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨python

csdn:https://blog.csdn.net/baidu_31657889/git

csdn:https://blog.csdn.net/abcgkj/github

github:https://github.com/aimi-cn/AILearners面試

1、引子

這是由LeetCode官方推出的的經典面試題目清單~
這個模塊對應的是探索的初級算法~旨在幫助入門算法。咱們第一遍刷的是leetcode推薦的題目。
查看完整的劍指Offer算法題解析請點擊github連接:
github地址算法

2、題目

給定一個字符串,找到它的第一個不重複的字符,並返回它的索引。若是不存在,則返回 -1。編程

案例:微信

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.複製代碼

一、思路

首先咱們能夠想到這道題須要的是一個不重複的字符,咱們順序找到第一個不重複的字符,把其索引存起來,返回最小的索引也就是第一個不重複的字符了。app

注:使用count方法,會增長時間複雜度,因此咱們用字典記錄各字符的索引。若是重複出現,則索引值須要加上len(s),小於len(s)的那個索引就是咱們求的值。機器學習

二、編程實現

python學習

class Solution(object):
    def firstUniqChar(self, s):
        """
        :type s: str
        :rtype: int
        """
        #算法超時
        # res = []
        # for i in s:
        #     if s.count(i) == 1:
        #         res.append(s.index(i))
        # if len(res):
        #     return min(res)
        # return -1
        
        # 用字典記錄各字符的索引。若是重複出現,則索引值須要加上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學習交流羣【1015286623】 獲取更多AI資料

分享技術,樂享生活:咱們的公衆號計算機視覺這件小事每週推送「AI」系列資訊類文章,歡迎您的關注!

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索