前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)

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

作者头像
Tz一号
发布2020-09-10 15:56:52
1.2K0
发布2020-09-10 15:56:52
举报
文章被收录于专栏:Tz一号Tz一号

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

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

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

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

代码语言:javascript
复制
<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/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:判断字符串A在中所有出现字符串B中(长度大于1)的索引。不得使用字符串方法indexof,substring等
    • // 思路: 如果不能使用字符串的相应方法,我们可以把字符串转换成数组,使用递归函数不断去比对相应的数组索引,然后把满足条件的索引打印出来,其实很多现在前后端交互处理数据的方法,用的都是递归偏多,千万别小瞧递归!
      • 如果大家有任何疑问即可留言反馈,会在第一时间回复反馈,谢谢大家!
      • 本人使用GSAP框架搭建的个人网站也上线啦!有兴趣可以访问 zhaohongcheng.com 查看,感谢~
      • 本人uni-app影视项目已经重磅开源,一套代码套发布到H5、APP、小程序等多个平台!有兴趣可以访问Dcloud官方插件市场https://ext.dcloud.net.cn/plugin?id=1839 查看,感谢~
      • 本文为Tz张无忌文章,读后有收获可以请作者喝杯咖啡,转载请文章注明出处:https://www.cnblogs.com/zhaohongcheng/
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档