马拉车算法

//Manacher's Algorithm (马拉车算法)
    class func longestPalindrome_ma(s: String) -> String {
        var charactersArr = Array<Character>()
        var resultString = String()
        var maxPoint = 0

        charactersArr.append("$")
        for character in s.characters {
            charactersArr.append("#")
            charactersArr.append(character)
        }
        charactersArr.append("#")
        charactersArr.append("%")

        var rightMax = 0, middlePoint = 0
        var lenArr = Array.init(repeating: 1, count: charactersArr.count)

        for i in 1 ..< 2 * s.characters.count + 2 {
            if rightMax > i {
                lenArr[i] = min(rightMax - i, lenArr[2 * middlePoint - i])
            }

            while charactersArr[i - lenArr[i]] == charactersArr[i + lenArr[i]] {
                lenArr[i] += 1
            }

            if lenArr[i] + i > rightMax {
                middlePoint = i

                rightMax = lenArr[i] + i
            }

            if lenArr[i] > lenArr[maxPoint] {
                maxPoint = i
            }
        }

        for i in stride(from: maxPoint - (lenArr[maxPoint] - 2), to: maxPoint + (lenArr[maxPoint] - 1), by: 2) {
            resultString.append(charactersArr[i])
        }

        return resultString
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • http://www.cnblogs.com/grandyang/p/4475985.html http://ww...
    98Future阅读 487评论 0 0
  • 题目: 求一个给定字符串的最大回文长度(一个句子如果正着读与倒着读的意思一样,就可以称为"回文句) 思路: 暴力的...
    一凡呀阅读 1,258评论 0 0
  • 边际就是‘新增’带来的‘新增’。 边际成本:每多生产一个单位的产品,所要新增的成本,就叫边际成本。可以简单称之为新...
    花开墙角阅读 314评论 0 0

友情链接更多精彩内容