[找出字符串中第一个匹配项的下标]

代码思路分析:

1. 边界情况处理

代码中没有显式处理以下边界情况,但逻辑已隐含支持:

  • needle 为空字符串 :应返回 0(但题目通常保证 needle 非空)。
  • haystackneedle :直接返回 -1(通过循环条件 l < n 隐含处理)。

2. 逐个字符匹配
cpp 复制代码
for (int l = 0; l < n; l++) {
    if (haystack[l] == needle[0]) {  // 找到首个字符匹配的位置
        int r = 0;
        int res = l;  // 记录起始位置
        while (r < needle.size() && haystack[l] == needle[r]) {
            l++;
            r++;
        }
        // ...
    }
}
  • 外层循环 :遍历 haystack 的每个字符 haystack[l]
  • 内层循环 :当 haystack[l]needle 的首字符匹配时,尝试匹配整个 needle
    • r 表示当前匹配到 needle 的位置。
    • res 记录 needlehaystack 中的起始位置。

3. 匹配成功判断
cpp 复制代码
if (r == needle.size()) {
    return res;  // 完全匹配,返回起始位置
}
  • 如果 r 达到 needle 的长度,说明完全匹配,返回起始位置 res
cpp 复制代码
class Solution {
public:
    int strStr(string haystack, string needle) {
        int n=haystack.size();
       for(int l=0;l<n;l++)
       {
       if(haystack[l]==needle[0])
       {int r=0;
       int res=l;
        while(r<needle.size()&&haystack[l]==needle[r])
        {
            l++;
            r++;
        }
        if(r==needle.size())
        {
           return res; 
        }
        l=res;
       }
       }
       return -1;
    }
};
相关推荐
Jack电子实验室4 分钟前
深入理解C语言函数指针:从基础到实战应用
java·c语言·算法
hashiqimiya18 分钟前
c++的头文件使用
开发语言·c++·算法
美狐美颜SDK开放平台1 小时前
直播美颜sdk特效功能架构全解析:从图像处理到AI渲染的技术演进
图像处理·人工智能·算法·架构·1024程序员节·美颜sdk·直播美颜sdk
Swift社区1 小时前
LeetCode 412 - Fizz Buzz
算法·leetcode·职场和发展
小年糕是糕手1 小时前
【C/C++刷题集】二叉树算法题(一)
c语言·数据结构·c++·算法·leetcode·学习方法·改行学it
前端炒粉10 小时前
18.矩阵置零(原地算法)
javascript·线性代数·算法·矩阵
暴风鱼划水11 小时前
三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤
算法·3d
mount_myj13 小时前
敏感信息屏蔽(一)【java】
java·算法·极课堂
先做个垃圾出来………13 小时前
偏移量解释
数据结构·算法