javascript-字节跳动,腾讯大厂面试题——力扣(28)实
2020-09-14 本文已影响0人
纯粹的少年
题目
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例
输入: haystack = "hello", needle = "ll"
输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
解题思路
- 首先我们看到题目的时候,就会直接想到使用indexOf(),来返回检索的下标。但是我们使用这种方式有点投机取巧。我们应该用最底层的方法来实现。
-
第二种,底层实现
- 首先先判断传入的第二个字符是否为空,就返回0.
- 之后我们循环遍历给定的字符串,将当前字符和检索字符的第一项对比,如果相同。我们就创建一个index=0来记录,比对成功的次数。
- 比对成功后,我们就循环遍历要查找的字符串。让当前字符和之前字符串的字符对比。比对不成功就直接跳出,如果比对成功,index++。
- 之后我们遍历完要查找的字符串,比对一下index和要检索的字符串的长度是否相等,如果相等。我们就直接返回外部循环的i。
- 最后我们所有对比不成功,就返回-1。
代码
- 话不多说,直接上代码。
// 取巧的方法
function strStr(haystack, needle){
return haystack.indexOf(needle);
};
- 原始的方法
function strStr(haystack, needle){
if(needle === "") return 0;
for(var i = 0 ; i < haystack.length ; i++){
if(haystack[i] === needle[0]){
var index =0;
for(var j = 0 ; j <needle.length ; j++){
if(haystack[i+j] !== needle[j]) break;
index++;
}
if(index === needle.length ) return i
}
}
return -1;
}