leetcode专题训练 28. Implement strStr()

博主遇到一道题想用KMP算法解决,但忘记具体写法,于是上网找教程学习。教程链接已给出,KMP算法是找相同前后缀构建next数组再进行匹配,学完教程即可直接写代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一看这道题,好像用kmp算法可以解决,可是思前想后都没有想起具体咋写,所以就上网找了教程。
教程链接:https://www.bilibili.com/video/av3246487?from=search&seid=10063401322647522802
(我明明当时考数据结构的时候背的滚瓜烂熟的,原理也搞得很清楚,全忘了,全还给老师了hhhh)
总之KMP就是找相同的前后缀,构建next数组,之后再匹配就好。
在学完教程之后就直接写代码就好了。

class Solution {
public:
    int strStr(string haystack, string needle) {
        if (needle == "") return 0;
        int l = needle.length();
        int next[l + 1];
        memset(next, 0, sizeof(next));
        int i = 0, j = 1;
        //构建next数组
        while (j < l) {
            if (needle[i] == needle[j]) {
                next[j] = i + 1;
                i++;
                j++;
            } else {
                if (i == 0) {
                    j++;
                } else {
                    i = next[i - 1];
                }
            }
        }
        //匹配
        int l2 = haystack.length();
        for (i = 0, j = 0; i < l2 && j < l; ) {
            if (haystack[i] == needle[j]) {
                i++;
                j++;
            } else {
                if (j == 0) {
                    i++;
                } else {
                    j = next[j - 1];
                }
            }
        }
        if (j != l) return -1;
        return i - l;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值