建立next数组#

  1. 初始化
  2. 前后缀不相同
  3. 前后缀相同
  4. next
func buildNext(pattern string) []int {
 next := make([]int, len(pattern))
 j := 0
 for i := 1; i < len(pattern); i++ {
  for j > 0 && pattern[i] != pattern[j] {
   j = next[j-1]
  }
  if pattern[i] == pattern[j] {
   j++
  }
  next[i] = j
 }
 return next
}

func strStr(haystack string, needle string) int {
 if len(needle) == 0 {
  return 0
 }

 next := buildNext(needle)
 j := 0

 for i := 0; i < len(haystack); i++ {
  for j > 0 && haystack[i] != needle[j] {
   j = next[j-1]
  }
  if haystack[i] == needle[j] {
   j++
  }
  if j == len(needle) {
   return i - len(needle) + 1
  }
 }

 return -1
}
本站总访问量  ·  访客数
你的IP 获取中…