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

代码思路分析:

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;
    }
};
相关推荐
汀、人工智能2 小时前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu2 小时前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
故事和你913 小时前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6483 小时前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
kvo7f2JTy3 小时前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
List<String> error_P4 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
流云鹤5 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
wljy15 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
清空mega6 小时前
C++中关于数学的一些语法回忆(2)
开发语言·c++·算法
香蕉鼠片6 小时前
数据结构八股(一)
数据结构·算法