美文网首页
leetcode算法-实现 strStr()

leetcode算法-实现 strStr()

作者: Weastsea | 来源:发表于2020-04-29 17:53 被阅读0次

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 1:

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

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

说明:

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

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

这一题比较简单, 应该有更多的方法去解决,这里我自己想出了2个方法

方法1: 直接使用api 有种胜之不武的赶脚

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

我们看下执行效率:



原生方法执行效率还是相当高效的。

上面一种方法有种胜之不武的感觉,如果面试的时候,我们以第一种方法去解决,肯定不会给面试官留下好的印象,所以我们还必须有其他的实现:

思路介绍: 通过replace方法,将haystack中的needle全部替换成一个特殊字符,然后循环计算出现的位置即可,如果找不到就返回-1,思路比较清晰,实现起来还是比较简单

var strStr = function (haystack, needle) {
    if (!needle) return 0
    const reg = new RegExp(`${needle}`, 'g')
    const a = haystack.replace(reg, '$')
    for (let i = 0; i < a.length; i++) {
        if (a[i] === '$') {
            return i
        }
    }
    return -1
}

我们看下执行效率: 比indexOf() 的空间复杂度和时间复杂度都多了许多。


相关文章

网友评论

      本文标题:leetcode算法-实现 strStr()

      本文链接:https://www.haomeiwen.com/subject/tmunwhtx.html