1 | 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 |
第一种普通的算法,O(n^2)
第二种manacher算法,O(n)
第一种
从中间位置向两边扩展,对于一个中间位置的扩展操作为O(n)
遍历中间位置,中间位置可能是某个字符,也可能在某两个字符之间,遍历操作复杂度O(2n)
总的时间复杂度O(n^2), 空间复杂度O(1)
代码
1 | class Solution { |
manacher算法
1 | char str[3000]; |
1 | 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 |
第一种普通的算法,O(n^2)
第二种manacher算法,O(n)
从中间位置向两边扩展,对于一个中间位置的扩展操作为O(n)
遍历中间位置,中间位置可能是某个字符,也可能在某两个字符之间,遍历操作复杂度O(2n)
总的时间复杂度O(n^2), 空间复杂度O(1)
代码
1 | class Solution { |
1 | char str[3000]; |