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

代码思路分析:

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;
    }
};
相关推荐
颜酱4 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919104 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878384 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz5 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女5 小时前
TRSV优化2
算法
代码游侠6 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472466 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy7 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异7 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653237 小时前
分布式系统安全通信
开发语言·c++·算法