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简单实例训练(21~30)
Nov 15 Python
python实现基于SVM手写数字识别功能
May 27 Python
Python动态导入模块的方法实例分析
Jun 28 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
Python发展简史 Python来历
May 14 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
Python实现SMTP邮件发送
Jun 16 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
一篇文章搞懂python的转义字符及用法
Sep 03 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学习之PHP变量
2006/10/09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
Python生成短uuid的方法实例详解
2018/05/29 Python
python实现移位加密和解密
2019/03/22 Python
Python中itertools的用法详解
2020/02/07 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
青年标兵事迹材料
2014/08/16 职场文书
英语导游词
2015/02/13 职场文书
开学第一周总结
2015/07/16 职场文书
创业计划书之美甲店
2019/09/20 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android