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

leetcode28. 找出字符串中第一个匹配项的下标_简单KMP

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

模仿:algorithm-journey/src/class100/Code01_KMP.java at main · algorithmzuo/algorithm-journey · GitHub

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void getNext(char *s, int m, int *next) {if (m == 1) {next[0] = -1;return;}next[0] = -1;next[1] = 0;int i = 2, cn = 0;while (i < m) {if (s[i - 1] == s[cn]) {next[i++] = ++cn;} else if (cn > 0) {cn = next[cn];} else {next[i++] = 0;}}
}int kmp(char *s1, char *s2) {int n = strlen(s1), m = strlen(s2);int x = 0, y = 0;int *next = (int *)malloc(m * sizeof(int));getNext(s2, m, next);while (x < n && y < m) {if (s1[x] == s2[y]) {x++;y++;} else if (y == 0) {x++;} else {y = next[y];}}free(next);return y == m ? x - y : -1;
}int strStr(char *haystack, char *needle) {return kmp(haystack, needle);
}

 官方题解:

C++

class Solution {
public:int strStr(string haystack, string needle) {int n = haystack.size(), m = needle.size();if (m == 0) {return 0;}vector<int> pi(m);for (int i = 1, j = 0; i < m; i++) {while (j > 0 && needle[i] != needle[j]) {j = pi[j - 1];}if (needle[i] == needle[j]) {j++;}pi[i] = j;}for (int i = 0, j = 0; i < n; i++) {while (j > 0 && haystack[i] != needle[j]) {j = pi[j - 1];}if (haystack[i] == needle[j]) {j++;}if (j == m) {return i - m + 1;}}return -1;}
};

C:

int strStr(char* haystack, char* needle) {int n = strlen(haystack), m = strlen(needle);if (m == 0) {return 0;}int pi[m];pi[0] = 0;for (int i = 1, j = 0; i < m; i++) {while (j > 0 && needle[i] != needle[j]) {j = pi[j - 1];}if (needle[i] == needle[j]) {j++;}pi[i] = j;}for (int i = 0, j = 0; i < n; i++) {while (j > 0 && haystack[i] != needle[j]) {j = pi[j - 1];}if (haystack[i] == needle[j]) {j++;}if (j == m) {return i - m + 1;}}return -1;
}

待定

相关文章:

  • 基于Django的权限管理平台
  • Pgvector+R2R搭建RAG知识库
  • 问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
  • 前缀和-724.寻找数组的中心下标-力扣(LeetCode)
  • OpenAI图像生成gpt-image-1登场,开启创意新可能
  • GPT-4o最新图像生成完全指南:10大应用场景与提示词模板
  • 【Vue】TypeScript与Vue3集成
  • Java学习手册:JSON 数据格式基础知识
  • 1Panel+Halo快速部署:简化服务器管理与网站搭建流程探索
  • 并发设计模式实战系列(6):读写锁
  • 立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务
  • 设计仿真 | Adams回调函数功能解析
  • 上岸率85%+,25西电先进材料与纳米科技学院(考研录取情况)
  • 通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索
  • ARINC818协议一些说明综述
  • QMT学习课程Day1
  • 针对密码学的 EM 侧信道攻击
  • OpenCV 图形API(62)特征检测-----在图像中查找最显著的角点函数goodFeaturesToTrack()
  • day36图像处理OpenCV
  • mfc学习(一)
  • 美国第一季度经济环比萎缩0.3%
  • AI世界的年轻人,如何作答未来
  • 浪尖计划再出发:万亿之城2030课题组赴九城调研万亿产业
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局
  • 节前A股持续震荡,“五一”假期持股还是持币过节胜率更高?
  • 美的集团一季度净利增长38%,库卡中国机器人接单增超35%