• 初级算法_字符串 --- 字符串中的第一个唯一字符


    1、题目

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

    输入: s = “leetcode”
    输出: 0

    输入: s = “loveleetcode”
    输出: 2

    输入: s = “aabb”
    输出: -1

    2、解法

    from typing import List
    import collections
    
    
    class Solution:
        def firstUniqChar(self, s: str) -> int:
    
            # 遍历字符串
            for i in range(len(s)):
                if s.count(s[i]) == 1:
                    return s.index(s[i])
            return -1
            
            # 遍历字符串
            for i in s:
                if s.find(i) == s.rfind(i):
                    return s.find(i)
            return -1
        
            # 哈希表
            fr = Counter(s)
            for i, ch in enumerate(s):
                if fr[ch] == 1:
                    return i
            return -1
    
    
    
    if __name__ == '__main__':
        s = "loveleetcode"
        a = Solution()
        print(a.firstUniqChar(s))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3、思路

    题目要求返回字符串中的第一个不重复元素的下标:
    (1)思路1:循环遍历所有字符串的值,如果某个值的数量不等于1,则返回这个元素的下标。
    循环遍历结束,如果还没有等于1的,则返回-1
    (2)思路2:循环遍历字符串,如果从左边找到的元素下标 == 从右边找到的元素下标,则返回该元素的下标
    遍历结束,否则等于-1。
    对比思路2,在1中我没有直接遍历字符串,梳理数组,发现所有数组除了数字需要range() 转化,其他都可以作为迭代器被遍历
    (3) 哈希表
    哈希表存储次数,遍历字符串的下标和值,如果在哈希表中值=1,则返回,否则-1
    这里定义了 fr = collections.Counter(s),其中 collections 是容器数据类型,这个模块实现了特定目标的容器,
    替代python的标准内建容器:dict、list、set、tuple,其中 Counter 类是字典的子类,提供立刻哈希对象的计数功能

    import collections
    
    s = "jiaotengfei"
    frequency = collections.Counter(s)
    print(frequency)
    
    # Counter({'i': 2, 'e': 2, 'j': 1, 'a': 1, 'o': 1, 't': 1, 'n': 1, 'g': 1, 'f': 1})
    
    from collections import Counter
    
    a = Counter()                           # 一个空容器
    a1 = Counter('gallahad')                 # 从迭代器中创建新容器
    a2 = Counter({'red': 4, 'blue': 2})      # 从映射中创建新容器
    a3 = Counter(cats=4, dogs=8)             # 从关键字中创建新容器
    print(a)
    print(a1)
    print(a2)
    print(a3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    哈希(hash的直译)表,翻译过来时散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。
    它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

  • 相关阅读:
    3.7Docker consul的容器服务更新与发现
    静态和默认路由配置-----计算机网络
    46道Redis面试题,含参考答案!
    SpringBoot SpringBoot 基础篇 3 SpringBoot 整合第三方技术 3.6 SpringBoot 整合 Druid
    大数据在电力行业的应用案例100讲(九)-数字化电价执行错误识别新模式
    Nginx + PHP 异常排查,open_basedir 异常处理
    java8 lambda和stream的理解
    双十一购物狂欢节是如何轰动全球的
    解决方案 | 法大大电子签加速高校七大场景全面实现数字化
    SAP 电商云 Spartacus UI 和 Accelerator UI 里的 ASM 模块
  • 原文地址:https://blog.csdn.net/weixin_45451320/article/details/126196492