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基于有道实现英汉字典功能
Jul 25 Python
python实现12306火车票查询器
Apr 20 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
对pandas处理json数据的方法详解
Feb 08 Python
django的ORM操作 增加和查询
Jul 26 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
python 双循环遍历list 变量判断代码
May 04 Python
Python sublime安装及配置过程详解
Jun 29 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
Python包argparse模块常用方法
Jun 04 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
解析link_mysql的php版
2013/06/30 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python简单日志处理类分享
2015/02/14 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
学术诚信承诺书
2014/05/26 职场文书
房地产端午节活动方案
2014/08/24 职场文书
规范化管理年活动总结
2014/08/29 职场文书
求职自我评价范文100字
2014/09/23 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL