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 发布!

相关文章
相关标签/搜索