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中用pycurl监控http响应时间脚本分享
Feb 02 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python教程之全局变量用法
Jun 27 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
Python实现简单的用户交互方法详解
Sep 25 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
python实现猜拳小游戏
Apr 05 Python
python对Excel的读取的示例代码
Feb 14 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
Python @property及getter setter原理详解
Mar 31 Python
Python中的__init__作用是什么
Jun 09 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
Dojo 学习要点
2010/09/03 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Django中Model的使用方法教程
2018/03/07 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
水利学院求职自荐书
2014/02/01 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
事假请假条范文
2014/04/11 职场文书
保护环境倡议书
2014/04/14 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书