1. 题目描述

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

示例 1:

  1. 输入: haystack = "hello", needle = "ll"
  2. 输出: 2

示例 2:

  1. 输入: haystack = "aaaaa", needle = "bba"
  2. 输出: -1

说明:

  • 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
  • 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

    2. 解题思路

    最直接方法就是使用字符串方法indexOf()来解决。

还可以使用字符串的另外一个方法:substring()来解决,遍历haystack,如果遇到一个和needle的第一的字母相同,就将haystack从该字母截取出和needle相同的长度,如果截取出的字符串和needle相等,就返回这个字母的索引值。

3. 代码实现

第一种方法:

  1. /**
  2. * @param {string} haystack
  3. * @param {string} needle
  4. * @return {number}
  5. */
  6. var strStr = function(haystack, needle) {
  7. if(!needle){
  8. return 0
  9. }
  10. let result = haystack.indexOf(needle)
  11. if(result>=0){
  12. return result
  13. }else{
  14. return -1
  15. }
  16. };

第二种方法:

  1. /**
  2. * @param {string} haystack
  3. * @param {string} needle
  4. * @return {number}
  5. */
  6. var strStr = function(haystack, needle) {
  7. if(!needle){
  8. return 0
  9. }
  10. const haylen = haystack.length
  11. const neelen = needle.length
  12. for(let i = 0; i<haylen; i++){
  13. if(haystack[i]===needle[0]){
  14. const str = haystack.substring(i, i+neelen)
  15. if(str===needle){
  16. return i
  17. }
  18. }
  19. }
  20. return -1
  21. };

4. 提交结果

第一种方法:
28. 实现 strStr() - 图1
第二种方法:
28. 实现 strStr() - 图2