敘述
- 難度:
Medium
- 花費時間: 10 分鐘
- 題目
給你一個包含英文的陣列 haystack
,再給你一個包含英文的陣列 needle
找出 needle
有沒有存在於 haystack
裡,有的話就回傳第一個值的索引。
點我開啟限制與範例
限制:
1 <= haystack.length, needle.length <= 10^4
haystack
andneedle
consist of only lowercase English characters.
Example 1:
1 | Input: haystack = "sadbutsad", needle = "sad" |
Example 2:
1 | Input: haystack = "leetcode", needle = "leeto" |
初見
想要用 Two Pointers
來做
筆記
使用 Sliding Window
來做
- 判斷
needle[0]
是否等於haystack[i]
- 如果等於: 進入 Window 內部比較,如果都等於,代表有正解,回傳
haystack[i]
- 如果不等於: Window 橫移一格 => i += 1
- 如果等於: 進入 Window 內部比較,如果都等於,代表有正解,回傳
TypeScript:
function strStr(haystack: string, needle: string): number { |
雖然通過了,但是效果比較不好。
Language | Runtime | Beats | Memory Usage | Beats |
---|---|---|---|---|
TypeScript | 147 ms | 5.52% | 50.4 mb | 5.16% |
改良
改用另一種寫法
- 迴圈平移
Window
- 每次都檢查
Window
裡面有沒有相等 - 有就回傳
TypeScript
function strStr(haystack: string, needle: string): number { |
C++
class Solution { |
Language | Runtime | Beats | Memory Usage | Beats |
---|---|---|---|---|
TypeScript | 60 ms | 94.13% | 42.9 mb | 73.13% |
C++ | 4 ms | 38.84% | 6.3 mb | 69.99% |