美文网首页
JavaScript实现manacher算法:寻找最长回文子串

JavaScript实现manacher算法:寻找最长回文子串

作者: Rocky_Wong | 来源:发表于2017-11-25 20:17 被阅读241次

    在lintcode遇到的一道算法题

    const longestPalindrome = function (s) {
        if (s.length == 1) {
           return s
        }
        let str = '#' + s.split('').join('#') + '#'
        let rl = []
        let mx = 0
        let pos = 0
        let ml = 0
        for (let i = 0; i < str.length; i++){
            if (i < mx) {
                rl[i] = Math.min(rl[2 * pos - i], mx - i)
            } else {
                rl[i] = 1
            }
            while (i - rl[i] > 0 && i + rl[i] < str.length && str[i - rl[i]] == str[i + rl[i]]) {
                rl[i]++
            }
            if (rl[i] + i - 1 > mx) {
                mx = rl[i] + i - 1
                pos = i
            }
            if (ml < rl[i]) {
                ml = rl[i]
                sub = str.substring(i - rl[i]+1, i + rl[i])
            }
        }
        return sub.split('#').join('').trim()
    }

    相关文章

      网友评论

          本文标题:JavaScript实现manacher算法:寻找最长回文子串

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