当前位置: 首页 > article >正文

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

思路

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

代码

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;

    }
};


http://www.kler.cn/a/538981.html

相关文章:

  • 对“云原生”的初印象
  • Faveo Helpdesk存在目录遍历漏洞(CVE-2024-37700)
  • 【LeetCode 刷题】贪心算法(4)-区间问题
  • openEuler部署 sysstat工具
  • Redis03 - 高可用
  • zzcms接口index.php id参数存在SQL注入漏洞
  • PyTorch Profiler 的使用
  • 2024年个人总结:求变
  • 自动化测试工具:selenium
  • mysql8 用C++源码角度看客户端发起sql网络请求,并处理sql命令
  • Spring Boot整合DeepSeek实现AI对话
  • TensorFlow 示例平方米转亩(二)
  • e2studio开发RA4M2(11)----AGT定时器频率与占空比的设置
  • Vue(7)
  • 单元测试的入门实践与应用
  • java-异常家族梳理(流程图)
  • Academy Sports + Outdoors EDI:体育零售巨头的供应链“中枢神经”
  • 掌握 CSS Flexbox 布局,轻松实现复杂网页设计
  • 利用MATLAB计算梁单元刚度矩阵,并组装成总体刚度矩阵
  • python:面向对象案例烤鸡翅
  • Cherry Studio:一站式多模型AI交互平台深度解析 可配合大模型搭建私有知识库问答系统
  • 基于DeepSeek API和VSCode的自动化网页生成流程
  • 详解策略模式
  • idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
  • matlab simulink 汽车四分之一模型轮胎带阻尼
  • 体验 DeepSeek-R1:解密 1.5B、7B、8B 版本的强大性能与应用