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 os模块介绍
Nov 30 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
Python中字符串的处理技巧分享
Sep 17 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
Django发送邮件功能实例详解
Sep 02 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
Python遍历字典方式就实例详解
Dec 28 Python
Pygame的程序开始示例代码
May 07 Python
如何基于python实现年会抽奖工具
Oct 20 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 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
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python实现一个简单的udp通信的示例代码
2019/02/01 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
python实现大文本文件分割
2019/07/22 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
Django权限控制的使用
2021/01/07 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
给排水专业应届生求职信
2013/10/12 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
就业表自我评价分享
2014/02/06 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
获奖感言怎么写
2015/07/31 职场文书