• 初级算法_字符串 --- 实现 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. 随着算法不断的练习,明显感觉到自己写推导式、对字典、列表、字符串的内置方法使用,思路切换更加顺滑了
  • 相关阅读:
    序列化--Serial
    基于JAVA图像AI风格转换系统(Springboot框架+AI人工智能) 开题报告
    AWS认证SAA-C03每日一题
    sqlmap 执行后打开其它程序
    Go 代码块与作用域,变量遮蔽问题详解
    c#设计模式-结构型模式 之适配器模式
    数据导入与预处理-拓展-pandas时间数据处理01
    快速排序的实现!递归实现!!超详细!!!
    出门在外保护好自己
    arraybuffer 转json
  • 原文地址:https://blog.csdn.net/weixin_45451320/article/details/126276583