给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
var strStr = function(haystack, needle) {
if(haystack ==''||needle =='') return 0//判断字符串是否为空
list1 = haystack.split('')
list2 = needle.split('')
let i,j=1,k=-1
for(i=0;i<list1.length;i++){
if(list2[0] == list1[i]){
k=i
if(list2.length == 1) return i
while(j!=list2.length){
if(list1[i+j]==list2[j]) j++
else {
j=0
k=-1
break
}
}
}
if(list2.length!=1&&j==list2.length) break
}
return j==list2.length?k:-1
};
对于此题我的思路是:
1、首先判断两个字符串是否为空,为空则返回0
2、将两个字符串转化为数组,方便比较
3、从haystack的第一项开始循环,判断needle的每一项否和它匹配,如果needle的长度唯一则直接返回下标即可
4、用k来记录下标的值
5、长度不为1的话继续判断之后的数,如果没有全部满足,则将j置为1,k置为-1
6、如果j等于needle的长度则代表找到了(这里加一个list2.length!=1是因为避开长度为一的时候但是第一此没有找出来的情况)
7、最后返回k的值即可
!!!!本人前端小白自学之路,欢迎各位大佬评论区指导,我会加以改良!!!!