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

news2025/2/24 23:42:26

【力扣题】题目描述:

【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, 可迭代对象):返回一个迭代器。依次遍历可迭代对象,不满足条件的内容去除,第一个满足条件的内容及其之后所有内容全部返回。

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])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm的学籍管理系统论文

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…

vue+echarts 几个案例

普通柱状图 <template><!-- 容器默认宽高是0 如果不设置 页面不显示--><div ref"mychart" id"mychart"></div> </template><script> import * as echarts from "echarts" import axios from axiosexport …

致大家的一封信2024 — 对称性原理

紫光集团董事长李滨先生&#xff0c;作为融信产业联盟理事长每年都会为联盟成员发布一封新年信&#xff0c;与各联盟伙伴分享新一年的思考与感悟。今年&#xff0c;李滨先生围绕“对称性原理”进行了2024年的新年分享&#xff0c;并向大家带来新一年的美好祝福。 原文如下&…

python 二次封装Modbus库实现设备间Modbus通信

前言&#xff1a; 想想好久没有更博客了&#xff0c;今天忙中偷闲准备写一篇Modbus相关的分享。在进入工业领域之前我一直从事软件行业的测试工作&#xff0c;所以也没听过Modbus协议&#xff0c;但是自从进入西门子工作后正式进入了工业领域&#xff0c;所以对Modbus协议也就…

chromium+clangd快速代码跳转

在开发chromium的时候我们使用vscode工具进行开发&#xff0c;如果使用C插件发现很容就卡死计算机了。 所以我们使用clangd工具来查看chromium的代码。 一、安装 在vscode中安装还是很简单的。 输入cland&#xff0c;点击安装即可 二、生成编译数据库 代码编译完成后&…

javascript的变量存储机制和原理

前言 在了解javascript的变量存储机制之前需要了解javascript的数据类型&#xff0c;在js中&#xff0c;数据类型分为基本数据类型和引用数据类型。二者存在内存中&#xff0c;基本类型存在栈中&#xff0c;引用类型存储在堆里。 想查看javascript数据类型详细介绍请访问&…

Spring中的事件机制

文章目录 摘要正文jdk事件Spring事件Spring事件监听ApplicationContext主动监听注解监听Bean监听 Spring事件发布 总结 摘要 在这篇文章我们将介绍Spring的事件机制&#xff0c;包括Spring内置事件、自定义事件、事件监听、事件发布、事件广播机制、事件异常处理等内容。Sprin…

Codeforces Round 919 (Div. 2)

Problem - A - Codeforces n个约束条件 a x 求出满足n个约束条件的整数的个数 大于等于x&#xff0c;取最大的 小于等于x&#xff0c;取最小的 然后不等于x的&#xff0c;记录在区间范围内的个数&#xff0c;减去这些 #include<bits/stdc.h> #define endl \n #define …

【前后端的那些事】开源!treeSelect树形结构数据展示

文章目录 tree-selector1. 新增表单组件2. 在父组件中引用3. 父组件添加新增按钮4. 树形组件4.1 前端代码4.2 后端代码 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c…

快速前端开发01

前端开发 1 前端开发1.快速开发网站2.浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 title&#xff08;head&#xff09;2.3 标题2.4 div和span2.4.5 超链接2.4.6 图片小结2.4.7 列表2.4.8 表格2.4.9 input系列&#xff08;7个&#xff09;2.4.10 下拉框2.4.11 多…

PIFA天线设计经验分享

一、PIFA天线模型分析 从IFA天线的Smith圆图可以看出&#xff0c;其阻抗图随着频率的变化范围十分大&#xff0c;从端口Matrix data中的阻抗数据可以看到这一点。对于WIFI 2.4G频段的应用IFA输入阻抗频宽大致可以满足要求&#xff0c;但是对于其他带宽较宽的应用&#xff0c;该…

Hive 数据迁移

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

优思学院|质量管理应该看哪些书最好?

很多学员问我们&#xff0c;在探索质量管理博大精深的知识之旅中&#xff0c;应该看哪些书最好&#xff1f;我们推荐学员了解质量管理和精益六西格玛方法的发展史&#xff0c;从中了解质量管理思维的演变&#xff0c;及后再了解质量管理的工具和方法论&#xff08;包括从PDCA、…

系统性学习vue-vue组件化编程

vue组件化编程 对组件的理解使用组件创建组件注册组件编写组件标签注意 组件的嵌套VueComponent构造函数Vue实例与组件实例(vm与vc)一个重要的内置关系单文件组件(项目使用) 对组件的理解 就是将可以复用的模块提取为独立个体, 解决依赖关系混乱,复用率不高的问题 组件: 实现应…

CTF CRYPTO 密码学-2

题目名称&#xff1a;enc 题目描述&#xff1a; 字符 ZZZZ X XXZ ZZ ZXZ Z ZXZ ZX ZZX XXX XZXX XXZ ZX ZXZZ ZZXZ XX ZX ZZ 分析 此字段是由Z和X组成的字符&#xff0c;联想到莫斯密码是由.和-组成的所以接下来可以尝试莫斯密码解题 解题过程&#xff1a; Step1&#xff1a;…

AI编程可视化Java项目拆解第二弹,AI辅助生成方法流程图

之前分享过一篇使用 AI 可视化 Java 项目的文章&#xff0c;同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程&#xff1a;可视化 Java 项目 有很多人感兴趣&#xff0c;我打算写一个系列文章拆解这个项目&#xff0c;大家多多点赞支持~ 今天分享的是第二…

四、任意文件读取漏洞

一、介绍 解释&#xff1a;任意文件读取漏洞就其本身来说就是&#xff0c;攻击者绕过网站防御者设置的防御&#xff0c;读取到了正常使用者不应该读取到的内容。网站开发者使用不同的语言&#xff0c;任意文件读取漏洞利用方式就不同。 二、不同开发语言的不同漏洞点 1.PHP …

(更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)

A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数&#xff08;2009-2023年&#xff09;参考《经济研究》中方先明&#xff08;2023&#xff09;的做法&#xff0c;将华证ESG评级进行赋值&#xff0c;指标包含C、CC、CCC、B、BB、BBB、A、AA、AAA共9个等级&#xff0c;…

使用Go语言的HTTP客户端和服务器

使用Go语言进行HTTP客户端和服务器开发是一种高效且强大的方式。Go语言的标准库提供了对HTTP协议的全面支持&#xff0c;使得创建HTTP客户端和服务器变得简单。 首先&#xff0c;让我们来看一下如何创建一个简单的HTTP服务器。在Go中&#xff0c;可以使用net/http包来创建HTTP…

抖音弹幕玩法汉字找不同让鼠标指针自动漂浮的实现原理及代码

如下图&#xff0c;抖音直播间弹幕互动玩法&#xff0c;为了增强用户的视觉感知体验&#xff0c;在里面加了一个鼠标&#xff0c;来让用户感知到自己在操作。下一节我们将背景音乐也给加上去。 我们实现的方案是用anime.js动画&#xff0c;来让一个图片在指定区域范围内随机漂浮…