strstr(KMP实现)

implement-strstr

http://www.nowcoder.com/questionTerminal/cc0c03ec17ad44c09d25870c301e0db7

KMP算法,关键在于求next数组,求next数组搞了好久都没搞懂,干脆记住算了。。。吧

//
// Created by jt on 2020/8/14.
//
#include <string>
using namespace std;

class Solution {
public:
    char *strStr(char *haystack, char *needle) {
        int size1 = strlen(haystack), size2 = strlen(needle);
        if (size2 == 0) return haystack;
        int next[size2], i = 0, j = 0;
        getNext(needle, next, size2);
        while(i < size1 && j < size2) {
            if (j == -1 || haystack[i] == needle[j]) {
                ++i;
                ++j;
            } else {
                j = next[j];
            }
        }
        if (j == size2) return haystack + i - j;
        else return nullptr;
    }

    void getNext(char *a, int *next, int size) {
        int i = 0, j = -1;      // i指向尾子串尾部,j指向头子串尾部
        next[0] = -1;
        while (i < size) {
            if (j == -1 || a[i] == a[j]) {
                if (a[++i] == a[++j]) next[i] = next[j];
                else next[i] = j;
            } else j = next[j];
        }
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务