在Carl那学的KMP算法

class Solution {
public:
    int kmp(string S, string T) {
        int ans = 0;
        int next[S.size()];
        int j = 0;
        next[0] = 0;
        for(int i = 1;i < S.size();i++)
        {
            while(j > 0 && S[i] != S[j])
                j = next[j - 1];
            if(S[i] == S[j])
                j++;
            next[i] = j;
        }
        j = 0;
        for(int i = 0;i < T.size();i++)
        {
            while(j > 0 && T[i] != S[j])
                j = next[j - 1];
            if(T[i] == S[j])
                j++;
            if(j == S.size())
            {
                ans++;
                j = next[j - 1];
            }
        }
        return ans;
    }
};