[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; i<size; ++i){ 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; i<size; ++i){ 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 };