实现strStr()
难度:简单
描述
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例:
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
思路分析:
实现方法一:双层for循环
双层for循环嵌套。当首位匹配时,循环检查后几位是否相同
实现方法二:切片比较
使用substring,这样就可以少一次内层循环了。速度和indexOf差不多,
实现方法三:切片比较
使用slice,比较haystack截取的字符串是否与needle相等
代码实现:
// 实现方法一
var strStr = function(haystack, needle){
if (needle==="") return 0
for(var i=0;i<haystack.length;i++){
if(haystack[i]===needle[0]){
var flag = true;
for (var j=1;j<needle.length;j++){
if (haystack[i+j]!=needle[j]){
flag = false
break;
}
}
if (flag) return i
}
}
return -1
};
// 实现方法二
var strStr = function (haystack, needle) {
if (needle === "") return 0
for (var i = 0; i < haystack.length; i++) {
if (haystack[i] === needle[0]) {
if (haystack.substring(i, i + needle.length) === needle) return i;
}
}
return -1
};
//实现方法三
var strStr = function(haystack, needle) {
var ans = -1
for(i=0;i<=haystack.length-needle.length;){
if( needle !== haystack.slice(i,i+(needle.length)) ){
i++
}else{
ans = i
return ans
}
}
return ans
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41