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除法运算小技巧
Apr 05 Python
Python Flask-web表单使用详解
Nov 18 Python
Django forms组件的使用教程
Oct 08 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python列表使用实现名字管理系统
Jan 30 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
python 经纬度求两点距离、三点面积操作
Jun 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
Protoss建筑一览
2020/03/14 星际争霸
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
简述JS控制台的使用
2018/07/15 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
python3实现随机数
2018/06/25 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
python实现图片识别汽车功能
2018/11/30 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
在线课程:Skillshare
2019/04/02 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
傲盾软件面试题
2015/08/17 面试题
学校岗位设置方案
2014/01/16 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
借款民事起诉状范文
2015/05/19 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers