欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python,Java,JavaScript实现indexOf

程序员文章站 2022-04-25 16:47:34
简介  最近做项目的时候,发现无论是前端还是后端,indexof出现的概率都非常频繁,今天我们来看下他的实现原理吧!  indexof的含义:给定一个字符串去匹配另一个字符串的下标,如果匹配到,返回下...

简介

  最近做项目的时候,发现无论是前端还是后端,indexof出现的概率都非常频繁,今天我们来看下他的实现原理吧!

  indexof的含义:给定一个字符串去匹配另一个字符串的下标,如果匹配到,返回下标,如果匹配不到则返回-1,其实原理还是比较简单的,如果需要你实现,那么应该怎么做呢?

原理

  现在给定匹配的字符串a,原始字符串b,比如匹配字符串a等于“叫练”,原始字符串b等于“边叫边练,我喜欢叫练”,你可能一眼就发现“叫练”是最后两个字符,我们以b做循环,一个一个单词去匹配,先找“叫”,找到计数器加1,然后继续找“练”,发现下个字符不是“练”,计数器清零,重新从“叫”开始查找,现在查找到b的倒数第二个字符了,下个字符是“练”计算器再加1,此时计数器等于2也正好是a字符串的长度,说明找到了,查找原理就是这样一个过程;下面我们分别以java,javascript,python方式实现下。

  注意:下面代码没有校验,仅供参考,python是index方法,实现原理一样,但找不到会报错!

实现

java实现

public static void main(string[] args) {
    string orgin = "边叫边练,我喜欢叫练";
    string serach = "叫练";
    int index = indexof(orgin,serach);
    system.out.println(index);
  }

/**
   * indexof 算法原理
   * @param orgin 原始字符串 b = “边叫边练,我喜欢叫练”;
   * @param serachstring 匹配字符串 a=“叫练”
   * @return int 下标
   */
public static int indexof(string orgin,string serachstring) {
  char[] chars = orgin.tochararray();
  char[] schars = serachstring.tochararray();
  //返回字符串下标
  int index = -1;
  //匹配字符串计数器,用于查询是否匹配到完整字符串
  int s_index = 0;
  //全局计数器,用于计算下标
  int move = 0;
  for (int i=0; i<chars.length; i++) {
    move++;
    //如果匹配到“叫”,继续向下开始匹配“练”
    if (chars[i] == schars[s_index]) {
      s_index++;
      if(s_index == schars.length) {
        index = move-schars.length;
        break;
      }
    } else {
      s_index = 0;
    }
  }
  return index;
}

javascript实现

/**
   * @param orgin 原始字符串 b = “边叫边练,我喜欢叫练”;
   * @param serachstring 匹配字符串 a=“叫练”
   **/
  function indexof(orgin,serachstring) {
    //返回字符串下标
    var index = -1;
    //匹配字符串计数器,用于查询是否匹配到完整字符串
    var s_index = 0;
    //全局计数器,用于计算下标
    var move = 0;
    for (var i=0; i<orgin.length; i++) {
      move++;
      //如果匹配到“叫”,继续向下开始匹配“练”
      if (orgin.substr(i,1) == serachstring.substr(s_index,1)) {
        s_index++;
        if(s_index == serachstring.length) {
          index = move-serachstring.length;
          break;
        }
      } else {
        s_index = 0;
      }
    }
    return index;
  }

python实现

# indexof 算法原理
# @param orgin 原始字符串 b = “边叫边练,我喜欢叫练”;
# @param serachstring 匹配字符串 a=“叫练”
# @return int 下标
def index(orgin, serachstring):
  # 返回字符串下标
  index = -1
  # 匹配字符串计数器,用于查询是否匹配到完整字符串
  s_index = 0
  # 全局计数器,用于计算下标
  move = 0
  for letter in enumerate(orgin):
    move = move + 1
    # 如果匹配到“叫”,继续向下开始匹配“练”
    if letter[1] == serachstring[s_index]:
      s_index = s_index + 1
      if s_index == len(serachstring):
        index = move - len(serachstring)
        break
    else:
      s_index = 0;

  return index

以上就是python,java,javascript实现indexof的详细内容,更多关于indexof的资料请关注其它相关文章!