LeetCode: Implement strStr()

来源:互联网 发布:淘宝店铺所在地修改 编辑:程序博客网 时间:2024/06/05 20:27

思路:KMP经典算法,具体解释可以参照July的关于KMP的博文。

code:

class Solution {public:    void GetNext(char * needle, vector<int> &next){        int n = strlen(needle);        next[0] = -1;        int k = -1;        int j = 0;        while(j < n-1){            if(k == -1 || needle[j] == needle[k]){                k++;                j++;                if(needle[j] != needle[k])                    next[j] = k;                else                    next[j] = next[k];            }            else                k = next[k];        }    }    char *strStr(char *haystack, char *needle) {        int n = strlen(haystack), m = strlen(needle);        if(n==0){            if(m == 0)                return haystack;            return NULL;        }        if(m == 0) return haystack;        vector<int> next(m,0);        GetNext(needle,next);        int i = 0, j =0;        while(i < n && j < m){            char *p = haystack + i, *q = needle + j;            if(j == -1 || *p == *q){                i++;                j++;            }            else                j = next[j];        }        if(j >= m)             return haystack+i-j;        else            return NULL;    }};


0 0
原创粉丝点击