python,Java,JavaScript实现indexOf


Posted in Python onSeptember 09, 2020

简介

最近做项目的时候,发现无论是前端还是后端,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的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
python 写入csv乱码问题解决方法
Oct 23 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
python实现批量修改文件名代码
Sep 10 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
详解Python:面向对象编程
Apr 10 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
Python之qq自动发消息的示例代码
Feb 18 Python
python 5个顶级异步框架推荐
Sep 09 #Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 #Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 #Python
详解python内置模块urllib
Sep 09 #Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 #Python
python 爬取B站原视频的实例代码
Sep 09 #Python
利用Python实现Json序列化库的方法步骤
Sep 09 #Python
You might like
一段防盗连的PHP代码
2006/12/06 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
php一个找二层目录的小东东
2012/08/02 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python之生产者消费者模型实现详解
2019/07/27 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
台湾森森购物网:U-mall
2017/10/16 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
品质主管的岗位职责
2013/12/04 职场文书
化妆品促销方案
2014/02/24 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
员工聘用合同范本
2015/09/21 职场文书
2019军训心得体会
2019/06/27 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python