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正则表达式实现截取成对括号的方法
Jan 06 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python如何为创建大量实例节省内存
Mar 20 Python
Python编写打字训练小程序
Sep 26 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
pandas分组聚合详解
Apr 10 Python
解决pycharm安装第三方库失败的问题
May 09 Python
基于PyQT实现区分左键双击和单击
May 19 Python
python模块如何查看
Jun 16 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
pandas提升计算效率的一些方法汇总
May 30 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面试题集锦
2012/03/08 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python gdal安装与简单使用
2019/08/01 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python图形用户接口实例详解
2019/12/16 Python
如何基于python测量代码运行时间
2019/12/25 Python
Python定义函数实现累计求和操作
2020/05/03 Python
PyTorch-GPU加速实例
2020/06/23 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
python爬虫如何解决图片验证码
2021/02/14 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
软件工程专业推荐信
2013/10/28 职场文书
清洁工岗位职责
2014/01/29 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
职务聘任书范文
2014/03/29 职场文书
亲属关系公证书
2014/04/08 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
Ruby处理YAML和json数据
2022/04/18 Ruby