28. Implement strStr()

来源:互联网 发布:java 判断紧急号码 编辑:程序博客网 时间:2024/06/11 03:35
Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
class Solution {public:    int strStr(string haystack, string needle) {        const int len1 = haystack.length();        const int len2 = needle.length();        if(len2 > len1)            return -1;        if(len2 == 0)            return 0;        return kmp(haystack, len1, needle, len2);    }    int kmp(string& haystack, int len1, string& needle, int len2){        vector<int> next = get_next(needle, len2);        int i = 0, j = 0;        while(i < len1 && j < len2){            if(j == -1 || haystack[i] == needle[j]){                ++i;                ++j;            }            else                 j = next[j];        }        return j == len2 ? i - len2 : -1;    }    vector<int> get_next(string& needle, int len){        vector<int> next(len, 0);        next[0] = -1;        int k = -1, j = 0;        while(j < len - 1){            if(k == -1 || needle[k] == needle[j])                next[++j] = ++k;            else                 k = next[k];        }        return next;    }};
0 0
原创粉丝点击