Description
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2
Input: "cbbd"
Output: "bb"
Solution 1(C++)
class Solution{
public:
string longestPalindrome(string s){
int len = INT_MIN;
string ans;
for(int i=0; i<s.size(); i++){
int oddlen = helper(s, i, i);
int evelen = helper(s, i, i+1);
if(len > max(oddlen, evelen)) continue;
string temp;
if(oddlen > evelen){
len = oddlen;
temp = s.substr(i-oddlen+1, 2*oddlen-1);
}
else{
len = evelen;
temp = s.substr(i-evelen+1, 2*evelen);
}
if(temp.size()>ans.size()) ans = temp;
}
return ans;
}
private:
int helper(string s, int i, int j){
int res = 0;
while(i>=0 && j<s.size() && s[i]==s[j]){
i--; j++; res++
}
return res;
}
};
Solution 2(C++)
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size(), len = 0, start = 0;
for(int i = 0; i < n; i++){
int left = i, right = i;
while(right < n && s[right+1] == s[right]) right++;
i = right;
while(left > 0 && right < n-1 && s[left-1] == s[right+1]){
left--;
right++;
}
if(len < right-left+1){
len = right - left + 1;
start = left;
}
}
return s.substr(start, len);
}
};
算法分析
这一道题可以参考其他题目:
解法二也不复杂。
程序分析
略。