<p>Given two strings <code>needle</code> and <code>haystack</code>, return the index of the first occurrence of <code>needle</code> in <code>haystack</code>, or <code>-1</code> if <code>needle</code> is not part of <code>haystack</code>.</p> <p> </p> <p><strong class="example">Example 1:</strong></p> <pre> <strong>Input:</strong> haystack = "sadbutsad", needle = "sad" <strong>Output:</strong> 0 <strong>Explanation:</strong> "sad" occurs at index 0 and 6. The first occurrence is at index 0, so we return 0. </pre> <p><strong class="example">Example 2:</strong></p> <pre> <strong>Input:</strong> haystack = "leetcode", needle = "leeto" <strong>Output:</strong> -1 <strong>Explanation:</strong> "leeto" did not occur in "leetcode", so we return -1. </pre> <p> </p> <p><strong>Constraints:</strong></p> <ul> <li><code>1 <= haystack.length, needle.length <= 10<sup>4</sup></code></li> <li><code>haystack</code> and <code>needle</code> consist of only lowercase English characters.</li> </ul>