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 14 Python
Python 绘图和可视化详细介绍
Feb 11 Python
深入理解python中的atexit模块
Mar 07 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
python3 下载网络图片代码实例
Aug 27 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
解决pip install psycopg2出错问题
Jul 09 Python
如何用Django处理gzip数据流
Jan 29 Python
Python预测分词的实现
Jun 18 Python
方法汇总:Python 安装第三方库常用
Apr 26 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+MySQL 制作简单的留言本
2009/11/02 PHP
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
理解javascript对象继承
2016/04/17 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python构建基础的爬虫教学
2018/12/23 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
详解python深浅拷贝区别
2019/06/24 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python如何写个俄罗斯方块
2020/11/06 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
代办委托书怎样写
2014/04/08 职场文书
全国文明单位申报材料
2014/05/31 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书