• 初级算法_字符串 --- 实现 strStr()


    1、题目

    实现 strStr() 函数。
    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
    说明
    当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
    对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

    示例 1:
    输入:haystack = “hello”, needle = “ll”
    输出:2

    2、代码

    from re import findall
    from typing import re
    import pytest
    
    
    class Solution:
        def strStr(self, haystack: str, needle: str) -> int:
    
            # # 内置函数
            # return haystack.find(needle)
    
            # 单次循环
            # 在haystack中截取len(needle)长度的内容,放到字典中,key是下标,value是取的值
            """
            思路:
            needle字符串长度为n,当haystack中的元素等于needle的开头元素,则截取haystack字符串[x:x+n]
            上面截取了n多个,如果needle在上面截图的内容中,则返回下标。
            将下标和截取的内容放到字典中,key是下标,value是截取的内容,只要value等于needle就返回下标key,否则-1
            """
            b = {x: haystack[x:x+len(needle)] for x in range(len(haystack)) if haystack[x] == needle[0]}
            for key, value in b.items():
                if needle == value:
                    return key
            return -1
    
    
    class TestSolution:
    
        def test_one(self):
            b = Solution()
            b.strStr("hello", "ll")
    
    
    • 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

    3、思路总结

    1. 本题是字符串中寻找字符串,python内置函数关于字符串寻找有:find()、rfind()、index()、rindex()

    str1.find(str2)
    返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1

    str1.rfind(str2)
    返回字符str2在str1最后出现的位置,未找到返回-1

    str1.index(str2)
    跟find一样,但是找不到会返回 ValueError

    str1.rindex(str2)
    跟rfind一样,但是找不到会返回 ValueError

    (1)刚开始想使用双指针,然后想到第一个指针是遍历第一个字符串,如果迭代器的元素跟第二个字符的第一个元素相等,那我截取跟第二个字符串长度相同的内容,将内容、下标放到字典中。
    (2)遍历字典,如果value跟第二个字符串相等,则返回key(key就是下标)。循环遍历完,还没有符合条件的,就-1

    b = {x: haystack[x:x+len(needle)] for x in range(len(haystack)) if haystack[x] == needle[0]}
    for key, value in b.items():
        if needle == value:
            return key
    return -1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 随着算法不断的练习,明显感觉到自己写推导式、对字典、列表、字符串的内置方法使用,思路切换更加顺滑了
  • 相关阅读:
    在window和linux下如何对sd卡或者u盘分区、删除分区等操作
    公网访问内网中Wsl2服务器(借助frp)
    懒人方案-半天搞定一个分布式后台管理系统
    STP、堆叠与VRRP如何使用
    Github+Markdown(1)
    10.26ALP论文原代码请稿
    网络基础(网络层)
    MindSpore编译构建后Vmap模块的RuntimeError问题
    身份认证简单介绍
    32、rocketMq应用
  • 原文地址:https://blog.csdn.net/weixin_45451320/article/details/126276583