持续创作,加速成长!这是我参与「掘金日新计划 · 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
本题可以直接利用 String
的 indexOf
方法偷懒解题。因为该方法可返回某个指定的字符串值在字符串中首次出现的位置,如果没有找到匹配的字符串则返回 -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()
如有任何问题或建议,欢迎留言讨论!