码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串

时间:2018-04-28 22:11:52      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:遍历   scribe   时间复杂度   偶数   ase   cas   public   字符   for   

 

题目描述

 

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。

给定字符串A以及它的长度n,请返回最长回文子串的长度。

 
测试样例:
 
"abc1234321ab",12

返回
:7

 

解题思路

 

考虑用中心扩展法,即遍历每个字符依次比较其两侧的字符是否相等并记录,分两种情况:子串长度是奇数和偶数。算法时间复杂度为O(N2)

 

代码

 

 1 class Palindrome {
 2 public:
 3     int getLongestPalindrome(string str, int n) {
 4         int count = 0;  
 5         int max = 0; 
 6         if (str.empty() || n<1)
 7             return 0;
 8         for(int i=0;i<n;i++){
 9             for(int j=0;i+j<n&&i-j>=0;j++){
10                 if(str[i-j]!=str[i+j])
11                     break;
12                 count=j*2+1;
13             }
14             if(count>max)
15                 max=count;
16             for(int j=0;i+j+1<n&&i-j>=0;j++){
17                 if(str[i-j]!=str[i+j+1])
18                     break;
19                 count=j*2+2;
20             }
21             if(count>max)
22                 max=count;
23         }
24         return max;  
25     }
26 };

 

最长回文子串

标签:遍历   scribe   时间复杂度   偶数   ase   cas   public   字符   for   

原文地址:https://www.cnblogs.com/wmx24/p/8969497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!