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

思路

kmp算法的练习,实际上来说在构建next数组和使用next数组都用到了前一位字符串的最长相等前后缀

代码

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

    int strStr(string haystack, string needle) {
        if(needle.size() == 0)
            return 0;
        
        vector<int> next(needle.size());
        getNext(&next[0], needle);

        int i = 0, j = 0;
        for(int i = 0; i < haystack.size(); i++){
            
            while(j>0 && needle[j] != haystack[i]){
                j = next[j-1];
            }

            if(needle[j] == haystack[i]) j++;


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

        return -1;

    }
};
相关推荐
_不会dp不改名_1 小时前
leetcode_80删除有序数组中的重复项 II
数据结构·算法·leetcode
√尖尖角↑1 小时前
力扣——【104. 二叉树的最大深度】
python·算法·leetcode
幸运小圣1 小时前
LeetCode热题100- 轮转数组【JavaScript讲解】
javascript·算法·leetcode
MYX_3091 小时前
第七节 文件与流
开发语言·c++·学习·算法
Lostgreen1 小时前
解密K-means:简单易懂的算法指南
算法·机器学习·kmeans
惊岁晚2 小时前
【R】Dijkstra算法求最短路径
算法·贪心算法·r语言
隼玉6 小时前
C语言简单练习题
c语言·c++·笔记·学习·算法
牛奶咖啡.8549 小时前
经典排序算法复习----C语言
c语言·开发语言·数据结构·算法·排序算法
d-jero10 小时前
cpp之模板
开发语言·c++·算法
tamak10 小时前
c/c++蓝桥杯经典编程题100道(18)括号匹配
c语言·c++·算法·蓝桥杯