您好、欢迎来到现金彩票网!
当前位置:彩之网 > 子串 >

5 最长回文子串(LeetCode 题解)

发布时间:2019-06-12 08:37 来源:未知 编辑:admin

  给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

  这篇文章是为中级读者而写的。它介绍了回文,动态规划以及字符串处理。请确保你理解什么是回文。回文是一个正读和反读都相同的字符串,例如,“aba” 是回文,而 “abc” 不是。方法一、最长公共子串:

  有些人会忍不住提出一个快速的解决方案,不幸的是,这个解决方案有缺陷(但是可以很容易地纠正):反转 S,使之变成 S​′​​。找到 S 和 S​′ 之间最长的公共子串,这也必然是最长的回文子串。

  S 以及 S​′ 之间的最长公共子串为 “abacd”,显然,这不是回文。

  我们可以看到,当 S 的其他部分中存在非回文子串的反向副本时,最长公共子串法就会失败。为了纠正这一点,每当我们找到最长的公共子串的候选项时,都需要检查子串的索引是否与反向子串的原始索引相同。如果相同,那么我们尝试更新目前为止找到的最长回文子串;如果不是,我们就跳过这个候选项并继续寻找下一个候选。

  这给我们提供了一个复杂度为 O(n^2) 动态规划解法,它将占用 O(n^2) 的空间(可以改进为使用 O(n) 的空间)。方法二、暴力法:

  很明显,暴力法将选出所有子字符串可能的开始和结束位置,并检验它是不是回文。

http://ibtlsports.com/zichuan/53.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有