leetcode 28. 实现 strStr()

一、题目

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回  -1 。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

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

二、解法

KMP算法:

func strStr(haystack string, needle string) int {
    n,m:=len(haystack),len(needle)
    if m==0{
        return 0
    }
    if n<m{
        return -1
    }
    next:=buildNext(needle)
    for i,j:=0,0;i<n;{
        if haystack[i]==needle[j]{
            i++
            j++
        }else{
            if j==0{
                i++
            }else{
                j=next[j-1]
            }
        }
        if j==m{
            return i-m
        }
    }
    return -1
}

func buildNext(s string) []int{
    len:=len(s)
    next:=make([]int,len)
    now:=0
    for i:=1;i<len;{
        if s[i]==s[now]{
            next[i]=now+1
            i++
            now++
        }else{
            if now==0{
                i++
            }else{
                now=next[now-1]
            }
        }
    }
    return next
}
posted @   livingsu  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示