找出字符串中第一个匹配项的下标-力扣

本题涉及到使用kmp算法,对字符串进行模式匹配,kmp算法可以参考代码随想录-kmp算法

代码如下:

cpp 复制代码
class Solution {
public:
    int strStr(string haystack, string needle) {
        vector<int> next = getNext(needle);
        int j = 0;
        for(int i = 0; i < haystack.size(); i++){
            while(j > 0 && haystack[i] != needle[j]){
                j = next[j - 1];
            }

            if(haystack[i] == needle[j]){
                j++;
            }
            if(j == needle.size()){
                return i - needle.size() + 1;
            }
        } 

        return -1;
    }

    vector<int> getNext(string& s){
        int j = 0;
        vector<int> next(s.size());
        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;
        }

        return next;
    }
};
相关推荐
s砚山s3 分钟前
代码随想录刷题——二叉树篇(十三)
数据结构·算法
alphaTao7 分钟前
LeetCode 每日一题 2026/1/5-2026/1/11
算法·leetcode
山上三树8 分钟前
详细介绍 C 语言中的 #define 宏定义
c语言·开发语言·算法
ulias21221 分钟前
AVL树的实现
开发语言·数据结构·c++·windows
黎雁·泠崖23 分钟前
二叉树知识体系全梳理:从基础到进阶一站式通关
c语言·数据结构·leetcode
AI科技星24 分钟前
引力与电磁的动力学耦合:变化磁场产生引力场与电场方程的第一性原理推导、验证与统一性意义
服务器·人工智能·科技·线性代数·算法·机器学习·生活
蜕变菜鸟26 分钟前
JS的Object.keys()和sort()排序的用法
数据结构·算法
源代码•宸27 分钟前
Golang基础语法(go语言error、go语言defer、go语言异常捕获、依赖管理、Go Modules命令)
开发语言·数据库·后端·算法·golang·defer·recover
镜中人★37 分钟前
408数据结构考纲知识点(更新中)
数据结构
如果你想拥有什么先让自己配得上拥有37 分钟前
算数顺序的逻辑和发展?
算法