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

本题涉及到使用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;
    }
};
相关推荐
mit6.8243 分钟前
hadoop|贪心
算法
2501_941805318 分钟前
在阿姆斯特丹智能港口场景中构建集装箱实时调度与高并发物流数据分析平台的工程设计实践经验分享
java·大数据·算法
涂山小楼14 分钟前
线程join()方法的深度理解
java·前端·算法
六毛的毛16 分钟前
填充每个节点的下一个右侧节点指针
leetcode
gihigo199821 分钟前
LDPC码硬判决译码算法的详细解析
网络·算法
Clarence Liu22 分钟前
快慢指针问题
后端·算法
Swift社区25 分钟前
LeetCode 467 环绕字符串中唯一的子字符串
算法·leetcode·职场和发展
Yzzz-F26 分钟前
P3870 [TJOI2009] 开关[线段树(区间加 区间和 变种)]
算法
yangpipi-26 分钟前
《C++并发编程实战》第6章 设计基于锁的并发数据结构
开发语言·数据结构·c++
wen__xvn31 分钟前
代码随想录算法训练营DAY7第三章 哈希表part02
数据结构·算法·散列表