leetcode必会:找出字符串的第一个匹配项

89 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

给你两个字符串 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 仅由小写英文字符组成

分析

**思路:遍历截取字符串, 从haystack(匹配字符串)中截取出与needle(查找字符串)长度相等的字符串进行比较, 如果相同返回当前开始截取的下标。**整体的算法设计过程还是比较简单方便的设计,虽然过程我们使用了字符串截取比较,这个过程需要细心的比较和判断,否则很容易陷入移动坐标的错误设计啊,希望大家多多总结,反思。不断的提高进化啊。

解答

        var strStr = function(haystack, needle) { let haylen = haystack.length; let needlen = needle.length; if (!needlen) { return 0; } else if (haylen < needlen) { return -1; } else if (haylen === needlen) { return haystack === needle ? 0 : -1; } else { for (let i = 0; i <= haylen - needlen; i++) { if (haystack[i] === needle[0]) { if (haystack.substring(i, i + needlen) === needle) { return i; } } } } return -1; }; 
      

总结

上面的算法思路让我学到了许多知识啊,希望大家继续努力,继续加油啊,加油。哈哈哈哈