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

代码思路分析:

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;
    }
};
相关推荐
科研前沿1 分钟前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨2 分钟前
1931. 用三种不同颜色为网格涂色
算法·leetcode
晨曦夜月28 分钟前
map与unordered_map区别
算法·哈希算法
图码1 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler011 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie11 小时前
实数列的常用递推模式
算法
代码小书生1 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星1 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室2 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz2 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva