写在前面

题目

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

 示例 1:
 ​
 输入: s = "leetcode"
 输出: 0
 示例 2:
 ​
 输入: s = "loveleetcode"
 输出: 2
 示例 3:
 ​
 输入: s = "aabb"
 输出: -1
 ​
 提示:
 ​
 1 <= s.length <= 105
 s 只包含小写字母
 ​
 来源:力扣(LeetCode)
 链接:https://leetcode.cn/problems/first-unique-character-in-a-string
 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路1:

 class Solution:
     def firstUniqChar(self, s: str) -> int:
         for index,_ in enumerate(s): #遍历字符串获取索引
             if s.count(_)==1: #如果计数为1
                 return index #则返回
         else:
             return -1  #没找到计数为1的,就返回-1
  • 方法1的解决效果,写的时候就能想到,耗时比较慢,因为每次获取到一个字符都要从头去遍历一遍。

思路2:hash表

  • count的问题可以通过hash表来规避

  • 得到一个字符的时候设置其次数为1,第二次遇到就+1,依次类推,最终去找value为1的,没有就返回-1

 class Solution:
     def firstUniqChar(self, s: str) -> int:
         hash_s = {}
         for _ in s:
             hash_s[_] = hash_s[_]+1 if _ in hash_s else 1
         for k,v in hash_s.items():
             if v==1:
                 return s.index(k)
         else:
             return -1

思路3:

  • 其实hash表那部分代码就是python的一些标准库

     s = 'hello'
     from collections import Counter
     counter = Counter(s)
     print(dict(counter))  #{'h': 1, 'e': 1, 'l': 2, 'o': 1}  
  • 修改上述代码

     class Solution:
         def firstUniqChar(self, s: str) -> int:
             from collections import Counter
             hash_s = dict(Counter(s))
             for k,v in hash_s.items():
                 if v==1:
                     return s.index(k)
             else:
                 return -1
  •  

LeetCode_387. 字符串中的第一个唯一字符的更多相关文章

  1. Leecode刷题之旅-C语言/python-387 字符串中的第一个唯一字符

    /* * @lc app=leetcode.cn id=387 lang=c * * [387] 字符串中的第一个唯一字符 * * https://leetcode-cn.com/problems/f ...

  2. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  3. 前端与算法 leetcode 387. 字符串中的第一个唯一字符

    目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...

  4. LeetCode初级算法--字符串02:字符串中的第一个唯一字符

    LeetCode初级算法--字符串02:字符串中的第一个唯一字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog. ...

  5. Java实现 LeetCode 387 字符串中的第一个唯一字符

    387. 字符串中的第一个唯一字符 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = ...

  6. LeetCode初级算法之字符串:387 字符串中的第一个唯一字符

    字符串中的第一个唯一字符 题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第 ...

  7. 字符串中的第一个唯一字符 python

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. s = "leetcode" 返回 0. s = "loveleetcode&qu ...

  8. LeetCode 387. First Unique Character in a String (字符串中的第一个唯一字符)

    题目标签:String, HashMap 题目给了我们一个 string,让我们找出 第一个 唯一的 char. 设立一个 hashmap,把 char 当作 key,char 的index 当作va ...

  9. [Swift]LeetCode387. 字符串中的第一个唯一字符 | First Unique Character in a String

    Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...

  10. LeetCode 387: 字符串中的第一个唯一字符 First Unique Character in a String

    题目: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. Given a string, find the first non-repeating charact ...

随机推荐

  1. 安装harbor仓库

    1.安装docker-compose curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-c ...

  2. [Android开发学iOS系列] TableView展现一个list

    TableView 基础 本文讲讲TableView的基本使用. 顺便介绍一下delegation. TableView用来做什么 TableView用来展示一个很长的list. 和Android中的 ...

  3. 记录一次PyQt5内存泄漏的问题解决

    前言 前几天利用python-mpv写了一个播放器,但是跑着跑着发现内存越来越大,经过我反复调试终于解决了这个问题. 解决思路 模块定位 首先我是一个模块一个模块测试的,这样可以尽快缩减出问题的代码范 ...

  4. Windows机器下VSCode安装及使用CmakeLists编译工程demo

    使用VSCode, Mingw and Cmake写工程代码,从零开始写的那种,全过程分享...... 你若发现该帖中有待商榷的地方,还请指正赐教,先行拜谢了! 1 软件下载 1.1 vscode下载 ...

  5. python-py文件打包成exe可执行文件

    方法一::打包完成后可以直接被他人使用,他人不用安装python环境的 可以使用pyinstaller模块实现将python项目打包成exe执行文件 """ 先安装模块 ...

  6. 命令查询职责分离 - CQRS

    概念 CQRS是一种与领域驱动设计和事件溯源相关的架构模式, 它的全称是Command Query Responsibility Segregation, 又叫命令查询职责分离, Greg Young ...

  7. .NET 6 中外部引用项目NU1105异常问题解决

    .NET 6 Project中,添加了其他解决方案的工程后,本地能编译通过,代码签入后,其他同事下载代码,编译报错: 错误 NU1105 找不到"E:\Teld\01Code\TTP_CTP ...

  8. input、print、字符串格式化输出

    1.使用input(), print()进行用户交互 """ 以前银行取钱只能拿着存折去柜台跟小姐姐交流才可以 你想干嘛 我想取钱 请输入密码 滴滴滴密码 想取多少钱 我 ...

  9. 主题 1 The Shell

    主题 1 The Shell 课程概览与 shell · the missing semester of your cs education (missing-semester-cn.github.i ...

  10. Request.Form&Request.QueryString实现伪ajax的效果

    1.问题描述 最近一直在搞公司老系统的需求开发,前端是asp,后端的vb.碰到了一个需求,是做一个"日志查询"功能,查询条件为:时间&操作人. 原本我的设计思路是异步查询, ...