Skip to content

找出字符串中第一个匹配项的下标

LeetCode-28

js
/** 方案一 直接indexOf返回...emm...
 */
var strStr = function(haystack, needle) {
  return haystack.indexOf(needle)
}
js
/** 方案二
 * 时间复杂度:O(nm),其中 n 和 m 分别是 haystack 和 needle 的长度。
 * 在最坏情况下,需要比较 haystack 字符串中的每个子串和 needle 字符串是否相等
 */

var strStr = function(haystack = '', needle = '') {
  let needleLen = needle.length
  if(needleLen === 0) return 0
  // i < 可以优化成 i < needleLen.length - needleLen + 1
  // 【如果剩余循环的次数少于needleLen + 1次了,说明没必要循环下去了】
  for (let i = 0; i < needleLen.length; i++) {
    // 比较haystack字符串中以i为开始下标的子串是否与needle字符串相等,如果相等返回下标即可
    if(haystack.substring(i, i + needleLen) === needle) {
      return i
    }
  }
  return -1
}