美文网首页
JS代码题6

JS代码题6

作者: twentyshaw | 来源:发表于2019-11-18 13:58 被阅读0次

字符串查找

请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)。

a='34';b='1234567'; // 返回 2
a='35';b='1234567'; // 返回 -1
a='355';b='12354355'; // 返回 5
isContain(a,b);

题目要求实现的功能其实就是String的indexOf()方法,所以:

function isContain(strA,strB){
    return strB.indexOf(strA)
}

但是题目要求“最基本的遍历来实现”,所以不能使用indexOf()方法。用遍历来实现的话:

function isContain(strA,strB){
    var arrA = strA.split('')
    var arrB = strB.split('')
    var flag,temp
    for(var j in arrB){
        if (arrA[0] === arrB[j]) {
            temp = parseInt(j) //注意这里的j是一个字符串。。它居然是个字符串
            flag = true
        }
    }
    var index = temp + 1
    for (var i = 1; i < arrA.length; i++){
        if (arrA[i] !== arrB[index++]) {
            flag = false
        }
    }
    if (flag) {
        return temp
    }else{
        return -1
    }
}

自己在写这个代码的过程中犯了一个错误:

  • for(in)循环索引是字符串而不是整数。并且我不应该用for in循环来遍历一个数组。
    所以代码最好改写成:
function isContain(strA,strB){
    var arrA = strA.split('')
    var arrB = strB.split('')
    var flag,temp
    for (var k = 0; k < arrB.length; k++) {
        if (arrB[k] === arrA[0]) {
            temp = j
            flag = true
        }
    }
    var index = temp + 1
    for (var i = 1; i < arrA.length; i++){
        if (arrA[i] !== arrB[index++]) {
            flag = false
        }
    }
    if (flag) {
        return temp
    }else{
        return -1
    }
}

然后还有几个要注意的点:

  • 用temp来记录匹配的起始位置
  • 用flag来判断输出
  • 最开始我想比较数组arrA和数组arrB的时候一直找不到好的方法。我试过外部遍历arrA然后在内部遍历arrB但是出错了。后来我发现我并不需要遍历arrB(我不需要拿到它的所有项目,也不需要它的length),我只要将arrA中的每一项与arrB的项依次对比就可以了。所以使用了arrB[index++]。(注意index的初始值为temp+1)

相关文章

  • JS代码题6

    字符串查找 请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • js 总结一 07-09

    ES6 一、js入门、js引入、变量、值类型、运算符 js引入代码如下 js变量代码如下: 值类型代码如下: 运算...

  • JS代码题5

    实现一个简单的虚拟 DOM 渲染 实现render函数: 主要用到了DOM API 和递归

  • JS代码题11

    统计一个字符串出现最多的字母 给出一段英文连续的英文字符窜,找出重复出现次数最多的字母 代码如下:

  • JS代码题14

    实现类似getElementsByClassName 的功能 自己实现一个函数,查找某个DOM节点下面的包含某个c...

  • JS代码题13

    随机生成指定长度的字符串 实现一个算法,随机生成指制定长度的字符串。 实现: base是手写的,有什么好的生成方法吗?

  • JS代码题4

    实现一个简单的模板引擎 实现render函数: 这道题的主要考察正则的有关知识: 圆括号 test()方法 exe...

  • JS代码题8

    数据结构处理 有一个祖先树状 json 对象,当一个人有一个儿子的时候,child 为对象,如果有多个儿子,chi...

  • JS代码题16

    给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 说...

网友评论

      本文标题:JS代码题6

      本文链接:https://www.haomeiwen.com/subject/vtavictx.html