判断字符串a是否被包含字符串b中,并返回第一次出现的位置

昨天去腾讯一面遇到这么一个题目

判断字符串a是否被包含字符串b中,并返回第一次出现的位置(找不到返回-1,不允许使用indexof)

看到这个第一念头想用正则实现,但是忽然忘记了正则怎么动态传参。于是放弃,就中规中矩使用遍历实现。

遍历实现

现场实现的代码逻辑差不多是这样的,使用2次遍历实现。

function indexOf(str1, str2) {
    for (let index = 0; index < str2.length - str1.length; index++) {
        if (str1[0] === str2[index]) {
            let tmp = true
            for (let j = 0; j < str1.length; j++) {
                if (str1[j] !== str2[index+j]) {
                    tmp = false
                }
            }
            if (tmp) return index
        }
    }
    return -1;
}

然后今天自己查了下动态正则传参,又写了一下正则,发现,正则是真的好简单

正则实现

function indexOf(str1, str2) {
    let reg = new RegExp(str1)
    let index = -1
    str2.replace(reg, function(all, i) {
        index = i
    })
    return index
}

然后跟小伙伴交流了一下,还可以这样!

function indexOf(str1, str2) {
    let reg = new RegExp(str1).exec(str2)
    return reg === null ? -1 : reg.index;
}

然后借鉴了一下,那这样也是可以的!

function indexOf(str1, str2) {
    let reg = new RegExp(str1)
    let result = str2.match(reg)
    return result === null ? -1 : result.index;
}

甚至可以通过split骚操作

split实现

function indexOf(str1, str2) {
    let arr = str2.split(str1)
    return arr[0] !== str2.length ? arr[0].length : -1
}

妙啊妙啊,果然解决问题的方法永远是很多的!

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦