[LeetCode] 5. Longest Palindromic Substring 最长回文子串

       本题求给定字符串的最长回文子串,首先可以想到使用暴力的方法,求出给定字符串的所有的回文子串的长度,取长度最长的子串,具体地分回文子串长度为奇数和长度为偶数讨论,时间复杂度O(n^2),但此暴力求解的方法在leetcode上会报超时错误,具体代码如下:

 1 #include<string>
 2 #include<string.h>
 3 using namespace std;
 4 class Solution {
 5 public:
 6     string longestPalindrome(string s) {
 7        if(s.empty()||s.size()<=1) return s;
 8        int size = s.size();
 9        string odd_str = longestPalindrome_odd(s,size);
10        string even_str = longestPalindrome_even(s,size); 
11        return odd_str.size() >= even_str.size()?odd_str:even_str;
12     }
13     
14     string longestPalindrome_odd(string& s,int size)
15     {
16        string res;
17        for(int i = 0; ii){
18            string substr =  s.substr(i,1);
19            for(int l = i-1,r = i+1;l>=0 && r<=size-1;l--,r++){
20                 if(s[l]!=s[r]) break;
21                  else{
22                    substr = s.substr(l,r-l+1);
23                 }
24            }
25            if(substr.size()>=res.size()) res = substr;
26        }
27        return res;
28     }
29 
30     string longestPalindrome_even(string& s,int size)
31     {
32         string res; 
33         for(int i = 0; ii){
34             string substr;
35             for(int l = i,r = i+1;l>=0&&r<=size-1;l--,r++){
36                 if(s[l]!=s[r]) break;
37                 else{
38                   substr = s.substr(l,r-l+1);
39                 }
40             }
41             if(substr.size()>=res.size()) res = substr;
42         }
43         return res;
44     }
45 };

你可能感兴趣的:([LeetCode] 5. Longest Palindromic Substring 最长回文子串)