Given two strings needle
and haystack
, return the index of the first occurrence of needle
in haystack
, or -1
if needle
is not part of haystack.
Example 1:
1 |
|
Example 2:
1 |
|
Constraints:
- 1 <= haystack.length, needle.length <= 104
- haystack and needle consist of only lowercase English characters.
Related Topics: Two Pointers
String
String Matching
解題邏輯與實作
這題看來是要找子字串第一次出現的位置,若無,則回傳 -1
。最直覺的方法就是從左到右一一比過去,若剩餘長度小於子字串長度就中止。對了,開始前可以加上兩判斷式,若 haystack
或 needle
長度為 0,直接回傳 -1;若 needle
長度大於 haystack
也直接回傳 -1。
先照這樣的想法去寫一版:
1 |
|
是說,如果不是為了寫過程,我應該會直接呼叫 find
XDDD
1 |
|
依稀記得除了暴力搜尋外,應該還有一個從後面比的演算法,到維基百科查了下,我印想中的應該是 Boyer-Moore字串搜尋演算法。所以我根據 〈Boyer Moore Algorithm for Pattern Searching〉的教學實做了一次,但這份教學應該是 Boyer-Moore 演算法的精簡版本,因為它沒實做好字元位移規則的部份:
1 |
|
其他連結
更新紀錄
最後更新日期:2023-02-15
- 2023-02-15 發布
- 2023-02-03 完稿
- 2023-02-03 起稿