写在前面

题目

给定一个字符串 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. JavaWeb3

    1. 会话技术 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间共享数据 方式: 客户端会话技术:Co ...

  2. VO层

    springboot中vo的作用: VO:View Object,视图层,其作用是将指定页面的展示数据封装起来,通常用于业务层之间的数据传递. 一般将vo层放置在model层下 类似于将前端页面传输的 ...

  3. 万字干货_JDK动态代理及其源码解析 拿捏了

    目录 代理模式 静态代理 静态代理和动态代理的区别?什么是静态.动态? 静态代理的使用步骤 示例 静态代理的缺陷 解决静态代理的缺陷的思路 JDK动态代理 JDK 动态代理类使用步骤 示例 底层原理 ...

  4. [排序算法] 堆排序 (C++)

    堆排序解释 什么是堆 堆 heap 是一种近似完全二叉树的数据结构,其满足一下两个性质 1. 堆中某个结点的值总是不大于(或不小于)其父结点的值: 2. 堆总是一棵完全二叉树 将根结点最大的堆叫做大根 ...

  5. i春秋Vld

    进去就问我们懂不懂Vulcan Logic Dumper,然后下面是一个报false.我们查看源码,在源码的最后提示我们index.php.txt的存在,话不多说,直接访问试试. 出现一堆我们暂时还看 ...

  6. xml中出现< >&等特殊字符如何存储

    特殊字符用下面对应得符号代替. < <= > >= & ' " < <= > >= & &apos; "

  7. jquery操作内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 【实战】Hadoop安装01-伪分布式-Pseudo

    Hadoop安装-伪分布式-Pseudo 〇.所需资料 一.前置环境安装 1.包含内容 (1)安装 虚拟机安装.系统安装 (2)配置 ip.host.主机名配置 关闭防火墙及selinux SSH免密 ...

  9. Django框架F查询与Q查询(全面了解)

    一:F与Q查询 1.F查询的作用 能够帮助你直接获取到列表中某个字段对应的数据 注意: 在操作字符串类型的数据的时候, F不能够直接做到字符串的拼接 2.查询卖出书大于库存数的书籍 # 导入F查询 f ...

  10. 模型驱动设计的构造块(上)——DDD

    为了保证软件实践得简洁并且与模型保持一致,不管实际情况如何复杂,必须运用建模和设计的实践. 某些设计决策能够使模型和程序紧密结合在一起,互相促进对方的效用.这种结合要求我们注意每个元素的细节,对细节问 ...