28題 實現 strStr (從結果看KMP)

2021-10-08 16:41:36 字數 1168 閱讀 1712

func

strstr

(haystack string

, needle string

)int

if n < m

next, q :=

getnext

(needle),0

for i :=

0; i < n; i++

if(haystack[i]

== needle[q])if

(q == m)

}return-1

}

如果理解了next的作用就好辦了,獲取next陣列的過程其實是相同的邏輯:

//pattern(簡稱pat)

func

getnext

(pat string)[

]int

if pat[k]

== pat[q]

next[q]

=k;}

return next

}

獲取next陣列:

指向目標串的下標q是不停前進的。

指向對比串的下標k是可以回退的。

獲取next陣列其實就是pat串和pat串匹配的過程,只不過指向目標串的下標要比對比串的下標先走一步(q=1, k=0)。迴圈過程會遇到兩種情況:

1、失配:回退找最長相同字首字串的下一位繼續匹配,持續失配將回退至起點為止。

2、匹配:k++,目的是為了讓next[q]得到最長相同字首的下一位。

每個迴圈,next[q]都可以得到最長相同字首的下一位,或0。

使用next陣列:

指向目標串haystack的下標i是不停前進的。

指向對比串needle的下標q是可以回退的。

使用next陣列是haystack串和needle串匹配的過程,下標同時起步(i=0,q=0),迴圈過程會遇到兩種情況:

1、失配:先需要知道最長相同字首字串的位置是在q-1(因為在q位失配了),再用next[q-1]跳轉到最長相同字首字串的下一位,繼續比較,持續失配將回退至起點為止。

2、匹配:q++,進入到下一位。

如果q等於needle串的長度,說明已經全部匹配完成了,這時候可以得到串的起始位置:i+1-m

LeetCode第28題 實現strStr

題目實現 strstr 函式。給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。class solution object defstrstr self,haystack,needle ...

LeetCode28 實現strStr 水題

一開始的想法是 取needle的第乙個字元開始唄,遇到合適的再比第二個。如果是找到的話,肯定是乙個個比對完了。找不到的情況就是,needle字串比haystack剩下的字串長了。能夠跳的情況.算了,還是一步步來,這個不合適就比對下乙個。比如原串1112,子串112,不好跳。要注意一些情況就行了 這裡...

28 實現 strStr (暴力)

1.問題描述 實現 strstr 函式。給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 ha...