题解 | #KMP#

kmp算法

http://www.nowcoder.com/practice/bb1615c381cc4237919d1aa448083bcc

class Solution {
public:
    vector<int> getNext(string pattern){
        int n = pattern.length();
        vector<int> next(n, 0);
        int j = next[0] = -1;
        for(int i = 1; i < n; i ++){
            while(j != -1 && pattern[i] != pattern[j + 1]) j = next[j]; //回退
            if(pattern[i] == pattern[j + 1]) j ++;
            next[i] = j;
        }
        return next;
    }
    int kmp(string S, string T) {
        // write code here
        vector<int> next = getNext(S);
        int m = T.length(), n = S.length();
        int j = -1;
        int ans = 0;
        for(int i = 0; i < m; i ++){
            while(j != -1 && T[i] != S[j + 1]) j = next[j];
            if(T[i] == S[j + 1]) j ++;
            if(j == n - 1){
                ans ++;
                j = next[j];
            }
        }
        return ans;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
05-21 00:27
点赞 评论 收藏
分享
点赞 评论 收藏
分享
04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务