首页 > 其他分享 >【Leetcode 每日一题】28. 找出字符串中第一个匹配项的下标

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

时间:2024-05-26 19:33:42浏览次数:17  
标签:下标 int needle 28 字符串 haystack Leetcode size

给你两个字符串 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

简洁代码:
 

 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 为空的情况。

标签:下标,int,needle,28,字符串,haystack,Leetcode,size
From: https://blog.csdn.net/weixin_50947533/article/details/139086381

相关文章

  • leetcode力扣 1004. 最大连续1的个数 III
    给定一个二进制数组nums和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。示例1:输入:nums=[1,1,1,0,0,0,1,1,1,1,0],k=2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1],翻转两个0后,最长的子数组长度为6。示例2:输入:nums=[0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1......
  • 地下城游戏(leetcode)
    个人主页:Lei宝啊 愿所有美好如期而遇地下城游戏https://leetcode.cn/problems/dungeon-game/description/图解+分析:代码classSolution{public:intcalculateMinimumHP(vector<vector<int>>&vv){introw=vv.size(),col=vv[0].size();......
  • 028SSM生活小助手系统生活缴费二手物品市场小程序(源码+运行视频+讲解视频)
    项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/10......
  • 自动参数计算单 SW1308 SDB628 MT3608 HX3608 电路&器件计算 DC升压芯片
    匹配SW1308计算公式制作,修改黄色单元格参数即自动计算电路和器件参数。适用于SDB628、MT3608、HX3608等可平替SW1308的DC升压芯片。此文档挂于淘宝,价格:0.2(GPT回血)文件包含:1、SX1308计算单EXEC;2、SX1308中英双语芯片规格书说明:文档有水印与锁定,机器人自动发货,蓝奏......
  • [LeetCode] 2903. Find Indices With Index and Value Difference I
    Youaregivena0-indexedintegerarraynumshavinglengthn,anintegerindexDifference,andanintegervalueDifference.Yourtaskistofindtwoindicesiandj,bothintherange[0,n-1],thatsatisfythefollowingconditions:abs(i-j)>=index......
  • leetcode力扣 2024. 考试的最大困扰度
    一位老师正在出一场由n道判断题构成的考试,每道题的答案为true(用'T'表示)或者false(用'F'表示)。老师想增加学生对自己做出答案的不确定性,方法是最大化有连续相同结果的题数。(也就是连续出现true或者连续出现false)。给你一个字符串answerKey,其中answerKey[i]是第i......
  • 2831. 找出最长等值子数组力扣解法和辅助图
    题目描述:给你一个下标从0开始的整数数组nums和一个整数k。如果子数组中所有元素都相等,则认为子数组是一个等值子数组。注意,空数组是等值子数组。从nums中删除最多k个元素后,返回可能的最长等值子数组的长度。子数组是数组中一个连续且可能为空的元素序列......
  • leetcode力扣 213. 打家劫舍 II
    计划偷窃沿街的房屋是小偷的计划。在这个地方,所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。但是,相邻的房屋都装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。为了计算在不触动警报装置的情况下,今晚能够偷窃到的最高金额,我们......
  • LeetCode/NowCoder-链表经典算法OJ练习4
    ·人的才华就如海绵的水,没有外力的挤压,它是绝对流不出来的。流出来后,海绵才能吸收新的源泉。......
  • LeetCode //C - 119. Pascal‘s Triangle II
    119.Pascal’sTriangleIIGivenanintegerrowIndex,returntherowIndexth(0-indexed)rowofthePascal’striangle.InPascal’striangle,eachnumberisthesumofthetwonumbersdirectlyaboveitasshown: Example1:Input:rowIndex=3Outpu......