力扣刷题(第九天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

找出字符串中第一个匹配项的下标

解题思路

从 haystack 的第一个字符开始,依次将 needle 与 haystack 的各个子串进行比较,若匹配成功就返回当前子串的起始下标;若遍历完 haystack 都未找到匹配的子串,则返回 -1。

具体步骤

  1. 计算字符串长度:算出 haystack 和 needle 的长度,分别记为 n 和 mn - m 就是 haystack 中能够容纳 needle 的最后一个可能的起始位置。
  2. 遍历 haystack:从 haystack 的第一个字符开始,以 n - m 为终点,对每个字符进行遍历。这是因为从 n - m + 1 位置开始的子串长度会小于 m,不可能与 needle 匹配。
  3. 比较子串:对于 haystack 中的每个可能的起始位置 i,都要检查从该位置开始的长度为 m 的子串是否与 needle 匹配。具体做法是从 needle 的第一个字符开始,逐个字符进行比较,若遇到不匹配的字符,就停止比较,然后将 haystack 的起始位置向后移动一位,继续比较下一个子串。
  4. 匹配成功的处理:若 needle 的所有字符都能与 haystack 中从 i 开始的子串对应匹配,也就是 j 等于 m,那就表明找到了匹配的子串,此时返回 i
  5. 匹配失败的处理:若遍历完 haystack 都没找到匹配的子串,就返回 -1。
    def strStr(haystack, needle):
        n = len(haystack)
        m = len(needle)
        # 遍历所有可能的起始位置
        for i in range(n - m + 1):
            j = 0
            while j < m:
                if haystack[i + j] != needle[j]:
                    break
                j += 1
            if j == m:
                return i
        return -1
    
    
    haystack = "sadbutsad"
    needle = "sad"
    print(strStr(haystack, needle))
        

逐行解释

def strStr(haystack, needle):
    # 此函数用于在 haystack 字符串中查找 needle 字符串首次出现的下标
    # haystack 为待搜索的主字符串
    # needle 为要查找的子字符串
    n = len(haystack)
    # 计算 haystack 字符串的长度,并将其赋值给变量 n
    m = len(needle)
    # 计算 needle 字符串的长度,并将其赋值给变量 m
    # 遍历所有可能的起始位置
    for i in range(n - m + 1):
        # 使用 for 循环来遍历 haystack 中所有可能作为 needle 起始位置的索引
        # n - m + 1 是因为从这个位置之后的子串长度小于 needle 的长度,不可能匹配
        # i 代表当前尝试匹配的起始索引
        j = 0
        # 初始化变量 j 为 0,j 用于遍历 needle 字符串中的字符
        while j < m:
            # 只要 j 小于 needle 的长度 m,就继续循环,目的是逐字符比较
            if haystack[i + j] != needle[j]:
                # 比较 haystack 中从索引 i 开始偏移 j 位置的字符和 needle 中索引为 j 的字符
                # 如果不相等,说明从当前 i 位置开始的子串与 needle 不匹配
                break
                # 一旦发现不匹配,就使用 break 语句跳出当前的 while 循环
            j += 1
            # 如果当前字符匹配,将 j 加 1,继续比较下一个字符
        if j == m:
            # 如果 j 等于 m,说明 needle 中的所有字符都已经成功匹配
            return i
            # 此时返回当前的起始索引 i,它就是 needle 在 haystack 中首次出现的位置
    return -1
    # 如果遍历完所有可能的起始位置都没有找到匹配,返回 -1 表示未找到

# 以下是调用示例
haystack = "sadbutsad"
# 定义待搜索的主字符串
needle = "sad"
# 定义要查找的子字符串
print(strStr(haystack, needle))
# 调用 strStr 函数并打印结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值