实现 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() 的空间复杂度和时间复杂度都多了许多。

网友评论