首页 > 试题广场 >

最长回文子串

[编程题]最长回文子串
  • 热度指数:233868 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。


数据范围:
要求:空间复杂度 ,时间复杂度
进阶:  空间复杂度 ,时间复杂度
示例1

输入

"ababc"

输出

3

说明

最长的回文子串为"aba"与"bab",长度都为3
示例2

输入

"abbba"

输出

5
示例3

输入

"b"

输出

1
头像 江南好___
发表于 2021-07-18 15:07:34
精华题解 描述 题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。 给定字符串A以及它的长度n,请返回最长回文子串的长度。 示例 输入:"abc1234321ab",12 返回值:7知识点:字符串难度:⭐⭐⭐ 题解 方法一:中心扩散 解题思路: 算法流程: 每 展开全文
头像 牛客题解官
发表于 2022-04-22 12:47:52
精华题解 题目主要信息: 给定一个仅包含小写字母的字符串,求它的最长回文子串的长度 回文串,指左右对称的字符串 举一反三: 学习完本题的思路你可以解决如下题目: BM65 最长公共子序列(二) BM66.最长公共子串 BM71.最长上升子序列(一) BM75 编辑距离(一) BM76 正则表达式匹配 BM 展开全文
头像 牛一霸
发表于 2021-07-04 23:22:46
精华题解 题目:最长回文子串 描述:对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。 示例1:输入:"abc1234321ab",12,返回值:7 解法一: 思路分析:根据题意可得,最长回文子串 展开全文
头像 牛客500979850号
发表于 2021-07-14 10:30:35
精华题解 方法一:暴力解法 最直接粗暴的方法,但是时间复杂度很高。按照子串起始位置和结束位置,遍历所有可能的子串,即 left:0->n-1, right:left+1->n-1。再每次通过while循环判断该子串是否是回文串。 第一层循环为子串起始位置,第二层循环为子串结束位置,第三层循环为判 展开全文
头像 数据结构和算法
发表于 2021-04-02 11:23:17
1,中心扩散法 中心扩散法也很好理解,我们遍历字符串的每一个字符,然后以当前字符为中心往两边扩散,查找最长的回文子串,下面随便举个例子,看一下 图片中我们是以每一个字符为中心,往两边扩散,来求最长的回文子串。但忽略了一个问题,回文串的长度不一定都是奇数,也可能是偶数,比如字符串& 展开全文
头像 LaN666
发表于 2020-11-22 14:47:41
暴力解法 直接判断每一个子串是不是回文子串,然后取其中最长的值返回 public class Palindrome { public int getLongestPalindrome(String A, int n) { int maxLen = 0; //暴 展开全文
头像 2021找工作
发表于 2020-09-30 00:05:44
这个题目用到了动态规划的思想具体注意字符串的遍历顺序一定是从后向前的,因为这样才能解决之前没有计算而直接出答案的问题。这里的dp数组比较难想,是应该存储所经过的子字符串是否是回文数 public static int getLongestPalindrome(String A, int n) { 展开全文
头像 子夜降晴空
发表于 2021-03-22 15:38:09
动态规划: class Solution { public: int getLongestPalindrome(string A, int n) { if(n <= 1) return n; int longest = 1; bool d 展开全文
头像 想躺着
发表于 2021-02-23 16:54:53
提供一个新思路,通过回文字符串的特性,正反读取都相同,可以将字符串逆转后,求取最长公共子串,但可能会出现其他部分重置与另一部分相同,所以需要对比找到最长公共子串的索引与原索引相加是否为字符串长度-1,即 i+j-tmp[j+1]+1== len(A)-1,如果相等,则更新最长回文子串. 更新: 此处 展开全文
头像 LifelongCode
发表于 2021-02-03 21:04:45
解法1:暴力解法 直接判断每一个子串是不是回文子串,然后取其中最长的值返回 public class Palindrome { public int getLongestPalindrome(String A, int n) { int maxLen = 0; 展开全文
头像 麻豆出品
发表于 2020-09-13 22:26:50
思路1(动态规划,O(n^2))从第一个字符往后遍历,把每个字符都当作中心去向两边扩散,依次比较对称位置是否相等,当碰到左右边界停下。注意要分奇偶子串两种情况。 代码1 class Palindrome: def getLongestPalindrome(self, A, n): 展开全文
头像 热爱大数据的小hj
发表于 2021-11-13 14:14:33
我使用的是中心位置法,遍历去头去尾的字符串,若字符串左边右边相等,则两个指针定位左边右边,同时向外扩展直到不相等,则回文长度是right_point - left_point - 1;若字符串左边或者右边的某一位与该字符串相等,则指针定位这两个相等的字符,并同时向外扩展直到不相等,方法相同;算法时间 展开全文
头像 友晋
发表于 2021-09-23 15:14:18
# -*- coding:utf-8 -*- class Solution: def getLongestPalindrome(self, A, n): # write code here count= [] flag = 1 展开全文
头像 菜鸡孙连城
发表于 2022-03-25 19:37:52
遍历每个字符,以该字符为中心,不断向两边扩展,求回文字符串的最大长度 注意分为奇偶,比如xyzabbaxyz,b为中心的时候分为b和bb function getLongestPalindrome( A ) { function getLength(begin,end){ whil 展开全文