leetcode-28-实现 strStr()

1,628 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

题目地址

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回  -1 ****。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

提示:

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

解题思路-indexOf

本题可以直接利用 StringindexOf 方法偷懒解题。因为该方法可返回某个指定的字符串值在字符串中首次出现的位置,如果没有找到匹配的字符串则返回 -1,刚好符合本题的要求。

代码实现

var strStr = function(haystack, needle) {
    return haystack.indexOf(needle)
}

解题思路-遍历对比

但是解本题利用语言提供的方法属于偷懒了,我们还是应该通过自己的算法解题。
这里我们遍历数组的每一个位置,并判断从该位置开始向后是否可以匹配 needle,如果可以匹配,返回该下标;
如果到处理完 haystack 都没有匹配到,返回 -1 即可。

代码实现

var strStr = function(haystack, needle) {
    const len = needle.length
    const firstChar = needle[0]

    for(let i = 0;i<haystack.length;i++){
        if(haystack[i] !== firstChar){
            continue
        }

        if(haystack.slice(i,i+len) === needle){
            return i
        }
    }

    return -1
}

至此我们就完成了 leetcode-28-实现 strStr()

如有任何问题或建议,欢迎留言讨论!