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

LeetCode Algorithm 05

时间:2015-03-22 00:18:36      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

 

Tags: String

 

容易想到的思路(可以解但会超时):

class Solution {
public:
    string longestPalindrome(string s) {
        int len = s.length();
        for(int n=len; n>=1; n--){
            for(int i=0; i<=len-n; i++){
                if(isPalin(s.substr(i,n))){
                    return s.substr(i,n);
                }
            }
        }
    }
    bool isPalin(string sub){
        int len = sub.length();
        for(int i=0,j=len-1; i<j; i++,j--){
            if(sub[i]!=sub[j])
                return false;
        }
        return true;
    }
};

更好的思路:

上述思路相当于先构建一系列子字符串,然后分析每个子串是否回文数,这样将会有非常多的组合,计算复杂度高。这种思路其实是收缩的思路。

如果我们从前往后遍历,每次遍历到一个字符便以之为中心看能向两边扩散多远,从而形成一些列子串,如果形成的子串长度大于result,则更新result。这种思路是扩散的思路。

此题其实与LeetCode Algorithm 03有类似之处,即都不能直接构造固定长度字符串然后判断是否合乎要求。正确的做法都是先设定一个子串的出发点(端点或中心点),然后尽可能增长直到不满足条件,形成子串,然后更新原有的局部最佳子串,最终形成全局最长子串。

 

c++代码:

 1 class Solution {
 2 public:
 3     string centerToOutside(string s, int left, int right){
 4         while(left>=0 && right<=s.length()-1 && s[left]==s[right]){
 5             left--;right++;
 6         }
 7         return s.substr(left+1, right-left-1);
 8     }
 9 
10     string longestPalindrome(string s) {
11         int len = s.length();
12         if(len == 0){
13             return "";
14         }
15         string result = s.substr(0,1);
16         for(int i=0; i<len-1; i++){
17             string s1 = centerToOutside(s, i, i);
18             if(s1.length() > result.length()){
19                 result = s1;
20             }
21             string s2 = centerToOutside(s, i, i+1);
22             if(s2.length() > result.length()){
23                 result = s2;
24             }
25         }
26         return result;
27     }
28     
29 };

 

LeetCode Algorithm 05

标签:

原文地址:http://www.cnblogs.com/chen0958/p/4356492.html

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