Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int strStr(string haystack, string needle) {
- int lenH = haystack.size(), lenN = needle.size();
- if(lenH < lenN)return -1;
- //KMP, calculate next array
- vector<int> next(lenN + 1, -1);
- int k = -1, i = 0;
- while(i < lenN)
- {
- if(k == -1 || needle[i] == needle[k])
- next[++i] = ++k;
- else
- k = next[k];
- }
- int j = 0;
- i = 0;
- while(i < lenH && j < lenN)
- {
- if(j == -1 || haystack[i] == needle[j])
- {
- ++i;
- ++j;
- }
- else
- j = next[j];
- }
- return j == lenN? i - lenN: -1;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement