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实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Scrapy框架使用的基本知识
Oct 21 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
基于python修改srt字幕的时间轴
Feb 03 Python
Django自关联实现多级联动查询实例
May 19 Python
Python中的xlrd模块使用原理解析
May 21 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
Python工程师必考的6个经典面试题
Jun 28 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 Python
pytorch--之halfTensor的使用详解
May 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不使用插件导出excel的简单方法
2014/03/04 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
给分销商的致歉信
2014/01/14 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
法制报告会主持词
2014/04/02 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python