Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者
[已开启]任务一:刷题打卡 * 10 篇
哪吒人生信条:如果你所学的东西 处于喜欢 才会有强大的动力支撑。
每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,2021
加油!欢迎关注加我vx:xiaoda0423
,欢迎点赞、收藏和评论
时间:3 月 1 日 ~ 3 月 13 日
如果这篇文章有帮助到你,给个❤️关注,❤️点赞,❤️鼓励一下作者,接收好挑战了吗?文章公众号首发,关注 程序员哆啦A梦 第一时间获取最新的文章
❤️笔芯❤️~
一、题目描述
实现 strStr()
函数。
给定一个 haystack
字符串和一个 needle
字符串,在 haystack
字符串中找出 needle
字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1
。
输入: haystack = "hello", needle = "ll"
输出: 2
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0
。这与C语言的 strstr()
以及 Java
的 indexOf()
定义相符。
二、思路分析
当两字符串相等时,返回0
haystack
为空串时,返回-1
needle
为空串时,返回0
needle
的长度大于 haystack
返回-1
循环 haystack
,i
记录其指针。和 needle
的第一位进行相等判断,当一样时,开始循环 needle
,j
记录其指针。res
记录相等时的i指针,即结果。
i和j加一
,继续循环。
如果之后全相等,中间没有出现不等的情况。(hello,ll)
那么当j和needle
的长度相等了,就跳出循环。
如果中间出现不相等,那么i
就返回res
记录的下一位置,继续循环,res和j
重置。继续对比 noodle
的第一个字符。
重复上述步骤,当j和len
相等就说明匹配到了,跳出循环;i等于haystack
长度,即haystack
循环完毕后,j
还不等于len
,那么就是没找到,res
重置,跳出循环。
三、答案代码
var strStr = function(haystack, needle) {
if(haystack===needle) return 0
if(haystack==="") return -1
if(needle==="") return 0
if(needle.length>haystack.length) return -1
var j=0,i=0,res=-1
while(i>=0){
var c=haystack[i]
var len=needle.length
if(j===len) break
if(i==haystack.length){
if(j<len){
res=-1
}
break
}
if(c===needle[j]){
j++
if(res===-1) res=i
i++
}else{
if(res>-1){
i=res+1
j=0
res=-1
}else{
i++
}
}
}
return res
};
四、总结