【Python3】【力扣题】387. 字符串中的第一个唯一字符

这篇具有很好参考价值的文章主要介绍了【Python3】【力扣题】387. 字符串中的第一个唯一字符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【力扣题】题目描述:

【Python3】【力扣题】387. 字符串中的第一个唯一字符,力扣题,leetcode,python

【Python3】代码:

1、解题思路:遍历字符串,依次判断元素在字符串中的个数是否为1,第一个为1的返回该元素的索引号,若整个字符串都没有个数为1的,则返回-1。

知识点:enumerate(序列):返回可迭代的序列中所有索引号和对应元素,元组形式 (索引, 元素)。

              序列.count(...):统计某元素在序列中的个数。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        for i,x in enumerate(s):
            if s.count(x) == 1:
                return i
        return -1

2、解题思路:使用计数器统计出字符串中所有元素及其个数,再次遍历字符串,依次判断元素在计数器中的个数是否为1,若是,返回索引,若整个字符串都没有个数为1的,则返回-1。

知识点:collections.Counter(...):计数器,字典子类。统计序列中元素及其出现个数。

              字典[键]:获取字典中键对应的值。或修改键对应的值:字典[键]=值。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        import collections
        adict = collections.Counter(s)
        for i,x in enumerate(s):
            if adict[x] == 1:
                return i
        return -1

3、(1)解题思路:使用字典统计出字符串中所有元素及其第一次出现的索引,若重复出现,则该元素在字典中对应的值为-1;再次遍历字典的所有值,在不是-1的值中找出最小的索引号,若没有,返回-1。

知识点:dict():创建空字典。即{ }。

              len(序列):获取序列的长度。

              字典.values():返回可迭代的字典中的所有值。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        adict = dict()
        n = len(s)
        for i,x in enumerate(s):
            if x in adict:
                adict[x] = -1
            else:
                adict[x] = i
        first = n
        for i in adict.values():
            if i != -1 and i < first:
                first = i
        if first == n:
            return -1
        return first

 (2)解题思路:使用字典统计出字符串中所有元素及其第一次出现的索引,若重复出现,则该元素在字典中对应的值为字符串总长度加索引(方便后面获取最小值);再次遍历字典的所有值,找出最小的索引号。

知识点:min(...):获取最小值。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        adict = dict()
        n = len(s)
        for i,x in enumerate(s):
            if x in adict:
                adict[x] = i + n
            else:
                adict[x] = i
        result = min(adict.values())
        return -1 if result > n else result

4、解题思路:使用字典统计出字符串中所有元素及其第一次出现的索引,若重复出现,则该元素在字典中对应的值为-1;使用队列依次以元组形式记录元素及其第一次出现的索引号,若是重复的元素从队列移除。最终队列为空,则返回-1,否则返回队列第一个元素中记录的索引号。

知识点:collections.deque():双端队列。左端进,右端出。也可以右端进,左端出。

              队列.append():从队尾(右端)添加一个元素。

              队列.popleft():从队头(左端)移除一个元素,并返回该元素。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        import collections
        adict = dict()
        n = len(s)
        q = collections.deque()
        for i,x in enumerate(s):
            if x not in adict:
                adict[x] = i
                q.append((s[i],i))
            else:
                adict[x] = -1
                while q and adict[q[0][0]] == -1:
                    q.popleft()
        return -1 if not q else q[0][-1]

5、解题思路:从字符串中依次筛选出所有出现次数为1的元素,列表形式记录,若空列表,则没有不重复的元素,返回-1,否则返回列表中第一个元素在字符串中对应的索引号。【该方法超出时间限制】

知识点:filter(predict, 可迭代对象):返回一个迭代器。筛选出所有符合条件的元素。

              lambda:匿名函数。

              序列.index(...):获取元素在序列中的索引号。

              序列[索引]:获取序列中索引号对应的元素。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        # 超出时间限制
        alist = list(filter(lambda x:s.count(x)==1,s))
        return -1 if len(alist)==0 else s.index(alist[0])

改进:遍历字符串,依次判断元素出现的次数是否为1,从字符串中过滤掉不满足条件的元素,获取第一个满足条件的元素及之后所有元素,列表形式记录,若空列表,则返回-1,否则返回列表中第一个元素在字符串中对应的索引号。

知识点:itertools.dropwhile(predict, 可迭代对象):返回一个迭代器。依次遍历可迭代对象,不满足条件的内容去除,第一个满足条件的内容及其之后所有内容全部返回。文章来源地址https://www.toymoban.com/news/detail-799963.html

class Solution:
    def firstUniqChar(self, s: str) -> int:
        import itertools
        alist = list(itertools.dropwhile(lambda x:s.count(x)!=1, s))
        return -1 if len(alist)==0 else s.index(alist[0])

到了这里,关于【Python3】【力扣题】387. 字符串中的第一个唯一字符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串中的第一个唯一字符

     这段代码的作用是在一个字符串 s 中找到第一个不重复(只出现一次)的字符,并返回它的下标。具体实现方式如下: 定义变量 i 表示当前处理的字符下标,定义字符串 rem 表示已经检查过的字符集合。 使用 while 循环遍历整个字符串,对于每个字符执行以下操作: a. 在该

    2024年02月01日
    浏览(31)
  • 前端算法题——字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 遍历字符串 用一个对象来记数,出现过一次就+1, 遍历完毕,再次遍历字符串,看它们在之前记录的对象里的值,是否是1,是就返回下标,不是返回-1。

    2024年02月22日
    浏览(32)
  • 【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

    前言: 🎯个人博客:Dream_Chaser 🎈博客专栏:C++ 📚本篇内容:仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加 目录 917.仅仅反转字母  题目描述: 387.字符串中的第一个唯一字符 题目描述: HJ1 字符串最后一个单词的长度

    2024年04月09日
    浏览(89)
  • Python3 字符串

    字符串是 Python 中最常用的数据类型。我们可以使用引号( \\\' 或 \\\" )来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 = \\\'Hello World!\\\' var2 = \\\"Runoob\\\" Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。 Python 访问子字符串,可以使用方括号

    2024年02月11日
    浏览(54)
  • Python入门教程 | Python3 字符串

    字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 \\\" )来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。 Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串

    2024年02月10日
    浏览(37)
  • Python3 学习笔记 ~ 怎样打印字符串

    Python中变量的打印方法_python打印变量_清欢依旧的博客-CSDN博客

    2024年02月15日
    浏览(32)
  • Python3中将\uXXXX字符串转换为可见字符串的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,从事机器学习以及相关的前后端开发工作。曾在阿里云、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。   本文主要介绍了Python3中将uXXXX字符串转换为可见字符串的解决方

    2023年04月08日
    浏览(37)
  • 【前端面试3+1】12 toktn验证过程、面向对象特性、webpack和vite的区别、【字符串中的第一个唯一字符】

    用户登录:用户提供用户名和密码进行登录。 服务器验证:服务器接收到用户提供的用户名和密码,进行验证。 生成token:如果用户名和密码验证通过,服务器会生成一个token,通常包含一些加密的信息,如用户ID、过期时间等。 返回token:服务器将生成的token返回给客户端(

    2024年04月18日
    浏览(69)
  • python3字符串格式化用format()好还是 % 表达式好

    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 在 Python 中,使用 format() 方法是更推荐的方式来进行字符串格式化,特别是在Python3中。虽然 % 表达式仍然可以在Python中使用,但已经不推荐使用了,新的项目

    2024年04月16日
    浏览(60)
  • 【算法思考记录】动态规划入门!力扣2606. 找到最大开销的子字符串【Python3、动态规划】

    原题链接 动态规划(Dynamic Programming,简称 DP)是一种通过将原问题分解为相互重叠的子问题并只解决一次的方法来解决问题的算法优化技术。动态规划通常用于优化递归问题,通过存储子问题的解来避免重复计算,从而显著提高算法的效率。 动态规划的基本思想是将原问题

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包