Leetcode 28 Solution
This article provides solution to leetcode question 28 (implement-strstr).
Access this page by simply typing in "lcs 28" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/implement-strstr
Thinking Process
The straightforward solution of this question is just to find if the needle
exists in each position from the haystack
. If needle
size is N
, and the haystack
size is M
, the time complexity is O(M * N)
.
A better solution is to use KMP algorithm, which can achieve linear speed.
Time & Space Complexity
Assuming the length of the haystack
is M
, the length of the needle
is N
- Time complexity:
O(M)
- Space complexity:
O(N)
Solution
class Solution {
public:
int strStr(string haystack, string needle) {
int m = haystack.size();
int n = needle.size();
if (n == 0)
return 0;
int next[n] = {0};
int j = 0;
int i = 1;
while (i < needle.size())
{
while (j > 0 && needle[i] != needle[j])
j = next[j - 1];
next[i] = needle[i] == needle[j] ? ++j : 0;
i++;
}
j = 0;
i = 0;
while (i < haystack.size() && j < needle.size())
{
while (j > 0 && haystack[i] != needle[j])
j = next[j - 1];
j = haystack[i] == needle[j] ? ++j : 0;
i++;
}
return j == needle.size() ? i - j : -1;
}
};