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 相关文章推荐
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
利用python写个下载teahour音频的小脚本
May 08 Python
使用Python设计一个代码统计工具
Apr 04 Python
Python标准库shutil用法实例详解
Aug 13 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python中如何使用insert函数
Jan 09 Python
python默认参数调用方法解析
Feb 09 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 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上传图片类显示缩略图功能
2016/06/30 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
js转义字符介绍
2013/11/05 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Python中的作用域规则详解
2015/01/30 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
python能做什么 python的含义
2019/10/12 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python连接Impala实现步骤解析
2020/08/04 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
中间件的定义
2016/08/09 面试题
教师实习自我鉴定
2013/12/14 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
酒店前台岗位职责
2015/04/16 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
Python实现天气查询软件
2021/06/07 Python
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
vue中data里面的数据相互使用方式
2022/06/05 Vue.js