【Leetcode 每日一题】28. 找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1。

示例 1:

复制代码
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

复制代码
输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。

提示:

  • 1 <= haystack.length, needle.length <= 104
  • haystack 和 needle 仅由小写英文字符组成

参考代码:

复制代码
class Solution {
public:
    int strStr(string haystack, string needle) {
        int n = haystack.size(), m = needle.size();
        for(int i = 0; i <= n - m; i++){
            int j = i, k = 0; 
            while(k < m and haystack[j] == needle[k]){
                j++;
                k++;
            }
            if(k == m) return i;
        }
        return -1;
    }
};

讲解:

遍历原字符串 haystack 中的每一个字符,将每个字符作为搜索的起始点,然后从这个起始点开始尝试匹配目标字符串 needle

简洁代码:

cpp 复制代码
 if (needle.empty()) return 0; // 如果needle为空,返回0
         if (needle.size() > haystack.size()) return -1; // 如果needle比haystack长,返回-1

         int m = haystack.size();
         int n = needle.size();

         for (int i = 0; i <= m - n; ++i) {
            if (haystack.substr(i, n) == needle) {
                 return i; // 如果找到匹配项,返回起始下标
             }
         }
         return -1; // 如果没有找到匹配项,返回-1
     }
 };

使用了 substr 方法来检查 haystack 中从当前位置开始的 n 长度的子串是否与 needle 相等。这样做更加简洁且易于理解。同时,它也处理了 needle 为空的情况。

相关推荐
fish_zzzz15 分钟前
笔记-论数据结构1
数据结构
文丑颜不良啊25 分钟前
LeetCode276~300题目解析
java·leetcode
荆棘鸟智能27 分钟前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
葫三生1 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源
catcatuncle1 小时前
OpenWorkBuddy 部署排错手册:从源码启动到自己搭一个给团队用,七个最容易卡住的地方
算法
avi91111 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
淡海水1 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
碧海银沙音频科技研究院2 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
云淡风轻~窗明几净2 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论
小O的算法实验室3 小时前
ASOC,分层分数阶粒子群算法+无人机电场路径规划
算法