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

本题涉及到使用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;
    }
};
相关推荐
im_AMBER1 小时前
算法笔记 18 二分查找
数据结构·笔记·学习·算法
C雨后彩虹1 小时前
机器人活动区域
java·数据结构·算法·华为·面试
MarkHD1 小时前
车辆TBOX科普 第53次 三位一体智能车辆监控:电子围栏算法、驾驶行为分析与故障诊断逻辑深度解析
算法
苏小瀚2 小时前
[算法]---路径问题
数据结构·算法·leetcode
月明长歌2 小时前
【码道初阶】一道经典简单题:多数元素(LeetCode 169)|Boyer-Moore 投票算法详解
算法·leetcode·职场和发展
wadesir2 小时前
C语言模块化设计入门指南(从零开始构建清晰可维护的C程序)
c语言·开发语言·算法
t198751282 小时前
MATLAB水声信道仿真程序
开发语言·算法·matlab
前端之虎陈随易3 小时前
MoonBit内置数据结构详解
数据结构·数据库·redis
CoderYanger4 小时前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
Xの哲學4 小时前
Linux RTC深度剖析:从硬件原理到驱动实践
linux·服务器·算法·架构·边缘计算