纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)
2019-09-13 00:00
1856 查看
问题:判断字符串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)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
实际上这张图就很形象地表达出了递归。
好了,递归的知识差不多介绍完了。对了!简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)。
相关文章推荐
- 查找一个字符串在另一个字符串中出现的所有位置
- indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找
- 一个字符串中查找另一个字符出现的全部索引位置(JAVA)
- 【c语言】模拟实现strchr函数,功能:在一个字符串中查找一个字符第一次出现的位置,如果没有出现返回NULL
- JS中查找一个字符串中所有子串的位置
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- List的All方法使用问题:我用List1的All方法来确保List1的所有每个数组元素中是否包含Arr1中的任意元素,这个部分很难实现。 因为,没有一个数组中是否包含另一个数组中的任意元素这个功能
- 程序员面试金典: 9.11 排序与查找 11.1编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。
- 使用extjs,来实现一个页面调用另一个页面中的方法,并且能获得方法的返回值
- java实现查找一个字符串在另一个字符串出现的次数
- 编写一个函数,实现从一个字符串中,查找另一个字符串的位置(笔试题) 例如int func("12345", "34")返回值为2,即在2号位置找到字符串“34”。
- 实现 从“c:\\test.txt”这个文件中查找 "mobent"字符串出现的次数,并且记录出现的位置
- C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法
- C# 3.0 Cookbook:一、字符与字符串处理(3):在一个字符串内寻找另一个字符串出现的所有位置
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- kmp算法 查找一个字符串在另一个字符串出现的位置
- 查找某字符串在另外一个字符串中最后出现的位置
- 统计输入中所有单词出现的次数(使用二叉查找树实现:递归和非递归)
- 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
- js 判断一个字符串在另一个字符串中出现了几次。