LeetCode 28. 实现 strStr() (KMP模板题)

class Solution {
public:
    int strStr(string text, string pat) {
        int m = text.size(),  n = pat.size();
        if(n==0){
            return 0;
        }
        //  pat自我匹配,求next数组
        vector<int> next(n+1);
        int j = -1;
        next[0] = -1;
        for(int i = 1; i < n ;i++){
            while(j!=-1 &&  pat[i]!=pat[j+1]) {
                j = next[j];
            }
            if (pat[i] == pat[j + 1]) {
                j++;
            }
            next[i] = j;
        }
        //  和text匹配,求f数组。
        vector<int> f(m+1);
        j = -1;
        for(int i = 0;i < m;i++){
            while(j!=-1  && text[i]!=pat[j+1]){
                j = next[j];
            }
            if(text[i]==pat[j+1]){
                j++;
            }
            f[i] = j;
            if(f[i]==n-1)
                // j = next[j];
                return i-n+1;
        }
        return -1;
    }
};

你可能感兴趣的:(LeetCode,#,LC字符串)