题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

就很简单,双指针 + 中心扩散

  1. 遍历数组
  2. 从中心点开始
  • 这里又要分子串长度为偶数和奇数的情况
  1. 找到中心点往两边扩散,注意边界情况
  2. 循环结束,输出即可
let searchLen = (l, r, data) => {
    let res = 0, len = data.length
    while (l > -1 && r < len && data[l] === data[r]) {
            res = Math.max(res, r - l + 1)
            l--
            r++
    }
    return res
}
let main = () => {
    let input = readline()
    let data = input.split('')
    // 双指针 两边扩散
    let res = 0
    let len = data.length
    for (let i = 0; i < len; i++) {
        // 先假设回文长度为偶数
        let l = i, r = i + 1
        res = Math.max(searchLen(l, r, data), res)

        // 若回文长度为奇数
        l = i - 1, r = i + 1
        res = Math.max(searchLen(l, r, data), res)
    }

    console.log(res)
}
main()
全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务