8、实现字符串查找

实现一个字符串匹配算法,从字符串S中查找是否存在字符串T,若存在则返回第一次所在位置,不存在返回-1(不能基于indexOf以及includes等内置方法)

  • 思路一:循环原始字符串中的每一项,让每一项从当前位置街区T.length个字符和T比较,一样返回索引,一共循环S.length-T.length+1次
(function(){
  function myIndexOf(T){
    //this 原始的字符串,即S
    let lenT = T.length,
            lenS = S.length,
            result = -1;
    if(lenT>lenTS){
      return -1;
    }
    for(let i = 0;i<lenS-lenT+1;i++){
        let substr = S.substr(i,lenT)
      if(substr === T){
        result = i;
        break;
      }
    }
    return result;
  }
  String.prototype.myIndexOf = myIndexOf;
})()

let S = 'yqp27982348张三smile&&&smile',
        T = 'smile'
console.log(S.myIndexOf(T))
  • 思路二:正则处理
    • 直接正则匹配这个字符串,如果结果为null返回-1,部位null直接可以在正则匹配的 结果中找到index就是索引
(function(){
  function myIndexOf(T){
    //this 原始的字符串,即S
    let reg = new RegExp(T),
            res = reg.exect(this);
    return  res === null ? -1:res .index
  }
  String.prototype.myIndexOf = myIndexOf;
})()

let S = 'yqp27982348张三smile&&&smile',
        T = 'smile'
console.log(S.myIndexOf(T))

results matching ""

    No results matching ""