问题:判断字符串A在中所有出现字符串B中(长度大于1)的索引。不得使用字符串方法indexof,substring等

  有小伙伴在面试遇到了这个问题,乍一看如果使用使用字符串方法indexof,substring,很简单容易实现,但如果不使用这些方法,怎么样才能实现这个需求呢

  // 思路: 如果不能使用字符串的相应方法,我们可以把字符串转换成数组,使用递归函数不断去比对相应的数组索引,然后把满足条件的索引打印出来,其实很多现在前后端交互处理数据的方法,用的都是递归偏多,千万别小瞧递归!

话不多说,我们先上解决问题的方法:

<script>
// 其实很多现在前后端交互处理数据的方法,用的都是递归变多,千万别小瞧递归
// 思路: 不能使用字符串的相应方法,我们可以把字符串转换成数组,首先使用递归不断去比对相应的数组索引
// 随机的字符
var str1 = 'adfacddtgjacbasaclsaacdctacw';
// 条件筛选的字符
var str2 = 'basaclsa';
// 把相应的字符串转换为数组
var arr1 = str1.split('');
var arr2 = str2.split(''); function test (arr) {
// 写一个for循环,先把需要筛选的数组arr2第一个索引拿来比对
for(var i = 0; i < arr1.length; i++){
// 如果符合,执行下一层
if(arr[0] === arr1[i]){
// 进入到这里说明了: arr2的第一份索引的字符,和arr1的索引的字符相同相同
// 既然第一个索引相同,我们这里就声明一个变量num,让变量num依据arr2的长度去递增
var num = 0
function ccc (arr) {
// 第一个索引相同,让他们索引分别加上变量num,去比对他们索引后面的位置是否相同,如果满足条件继续让num递增
// 直到递增变量num的值等于arr1的长度为止,这时候说明这段索引和arr1完全相同
if (arr[num] === arr1[i+num]) {
if (num === arr.length-1) {
console.log( '符合条件的索引是', i)
}
num++
// console.log(num)
ccc (arr)
// 如果不能满足条件,就让该递归跳出
}else {
return
}
}
ccc(arr2)
}
}
}
test(str2)
</script>

  

  其实一说起递归,我想每个人都不陌生。举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...

  其实递归,就是在运行的过程中调用自己。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

实际上这张图就很形象地表达出了递归。

  好了,递归的知识差不多介绍完了。对了!简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)。

如果大家有任何疑问即可留言反馈,会在第一时间回复反馈,谢谢大家!

本人使用GSAP框架搭建的个人网站也上线啦!有兴趣可以访问 zhaohongcheng.com 查看,感谢~

本人uni-app影视项目已经重磅开源,一套代码套发布到H5、APP、小程序等多个平台!有兴趣可以访问Dcloud官方插件市场https://ext.dcloud.net.cn/plugin?id=1839 查看,感谢~

本文为Tz张无忌文章,读后有收获可以请作者喝杯咖啡,转载请文章注明出处:https://www.cnblogs.com/zhaohongcheng/

纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)的更多相关文章

  1. 在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0

    //在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0//如果某字符串, 直接传入字符串进来//如果要查找16进制,则用如下格式传参进来: #$1A#$2A#$3A function F ...

  2. vue.js+webpack在一个简单实例中的使用过程demo

    这里主要记录vue.js+webpack在一个简单实例中的使用过程 说明:本次搭建基于Win 7平台 Node.js 安装官网提供了支持多种平台的的LTS版本下载,我们根据需要来进行下载安装.对于Wi ...

  3. 在一个jsp页面中引用另一个jsp文件的路径的问题

    为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...

  4. VBA 在第二个sheet中查找第一个sheet中不存在的值

    VBA 在第二个sheet中查找第一个sheet中不存在的值  Sub Macro2() ' ' Macro2 Macro ' 宏由 Lizm 录制,时间: 2019/04/10 '   ' Dim ...

  5. 字符串匹配算法(在字符串T中查找是否有与字符串P相同的子串)

    T称为目标串(Target)或主串 ,P称为模式串(Pattren) 或子串 1. 简单字符串模式匹配算法 原理:用字符串P的字符依次与字符串T中的字符进行比较,首先将字符串P从第0个位置起与主串T的 ...

  6. eclipse中查找某一个字符串

    想要完全匹配查找一个字符串,如iCard,而iCardSys或iiCard这种都不行,可以用正则表达式来查找,如下: 参考链接:http://blog.csdn.net/u014656992/arti ...

  7. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在

    前言 检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等. (在Java语言还能够把数组转成 List , 在 list 中直接有 ...

  8. H5/纯JS实现:把网页中的文字复制到剪切板

    copy =() => { const dom = document.getElementById(`collect-text-${t.Id}`) const selection = windo ...

  9. NET 在一个数组中查找另一个数组所在起始位置(下标从0开始,未找到返回-1)

    问题: 如果 search 在 dist 中顺序出现而不要求连续出现,那代码应该如何修改?如何计算这种匹配的可能性? 数组 search=[5,4,6],在数据 dist=[1,5,5,4,3,4,5 ...

随机推荐

  1. Netty学习(二)-Helloworld Netty

    这一节我们来讲解Netty,使用Netty之前我们先了解一下Netty能做什么,无为而学,岂不是白费力气! 1.使用Netty能够做什么 开发异步.非阻塞的TCP网络应用程序: 开发异步.非阻塞的UD ...

  2. 获取n月后的当前时间

    例如用户计算会员的到期日期时间 public static Date getMonthNextOrBeforeDate(int monthNum) { Date dNow = new Date(); ...

  3. 防抖(debounce)和节流(throttle)

    场景说明:一般我们在前端页面中会给元素绑定click.scroll.onmousemove.resize等事件,这些事件的执行函数如果是去发请求获取数据的话,我们无意识的连续点击或者连续滚动会给服务器 ...

  4. 基于sparksql collect_list的udf定义踩坑

    多条collect_list,然后将collect_list的结果concat起来,最初使用的是concat_ws(),但是发现超过4个collect_list就会报错, select concat_ ...

  5. Mybatis多表查询之一对一查询的多种实现-XML配置

    Mybatis 中对于多表查询提供了非常强大的实现方式,主要是通过resultMap的结果映射对于多表查询后的返回值进行封装,让我们来看一下官网上对于resultMap的解释:resultMap 元素 ...

  6. Git安装与使用(windows环境)(一)----Git安装、生成公钥和私钥、添加SSH

    安装 1.从官网下载git:http://git-scm.com/downloads 2.安装git,选择git组件安装,如下图 3.一直next,直到出现下面的窗口.这里是选择命令行形式.(可以理解 ...

  7. OpenXML性能真的低下吗?

    博文NET导出Excel的四种方法及评测 中对比了4个库的导出性能,但对OpenXML的评价并不高,本人觉得不合理,所以我重新测试下性能 基于OpenXML的包装类 ExcelDownWorker p ...

  8. odoo项目结构参数属性详解

    1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构.   data:存放模块预制数据i18n:存放国际化文件models:存放模型等py代码security:存放权 ...

  9. 开发APP必须知道的API集合,来源http://www.cnblogs.com/wikiki/p/7232388.html

    笔记 OneNote - OneNote支持获取,复制,创建,更新,导入与导出笔记,支持为笔记添加多媒体内容,管理权限等.提供SDK和Demo. 为知笔记 - 为知笔记Windows客户端开放了大量的 ...

  10. 深入浅出TypeScript(2)- 用TypeScript创建web项目

    前言 在第一篇中,我们简单介绍了TypeScript的一些简单语法,那么如果我们只是简单使用TypeScript开发一个web项目,应该做哪些准备?接下来我们就结合TypeScript和Webpack ...