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对url格式解析的方法
May 13 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
django迁移文件migrations的实现
Mar 31 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
Python pygame实现中国象棋单机版源码
Jun 20 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多种序列化与反序列化的方法
2013/06/06 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
react-router 路由切换动画的实现示例
2018/12/03 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
实例讲解Python爬取网页数据
2018/07/08 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Django视图、传参和forms验证操作
2020/07/15 Python
python中PyQuery库用法分享
2021/01/15 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
名词解释型面试题(主要是网络)
2013/12/27 面试题
年会搞笑主持词
2014/03/27 职场文书
四风自我剖析材料
2014/09/30 职场文书
2014年财政局工作总结
2014/12/09 职场文书
中学生学习保证书
2015/02/26 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
Python图像处理之图像拼接
2021/04/28 Python