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
}
上一篇:对kmp算法的理解与应用


下一篇:golang练习2