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获取网页状态码示例
Mar 30 Python
python实现计算倒数的方法
Jul 11 Python
好的Python培训机构应该具备哪些条件
May 23 Python
django初始化数据库的实例
May 27 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
django如何实现视图重定向
Jul 24 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
django迁移文件migrations的实现
Mar 31 Python
Python虚拟环境venv用法详解
May 25 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
python 利用Pyinstaller打包Web项目
Oct 23 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
小程序实现展开/收起的效果示例
2018/09/22 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
python3.x上post发送json数据
2018/03/04 Python
为什么说python适合写爬虫
2020/06/11 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
营业经理岗位职责
2013/11/10 职场文书
行政助理岗位职责
2013/11/10 职场文书
个人收入证明范本
2014/01/12 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014年收银工作总结
2014/11/13 职场文书
八达岭长城导游词
2015/01/30 职场文书
催款律师函范文
2015/05/27 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
mysql 索引合并的使用
2021/08/30 MySQL