Discription
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
Solution
//穷举所有子串 时间O(N^3)
bool isPalindrome(string &s, int begin, int end)
{
while (begin < end) {
if (s[begin] == s[end]) {
++begin;
--end;
}
else
return false;
}
return true;
}
string longestPalindrome(string s) {
int maxLength = 0;
string result = "";
for (int i = 0; i < s.size(); ++i) {
for (int j = i; j < s.size(); ++j) {
if (isPalindrome(s, i, j) && j - i + 1>maxLength) {
maxLength = j - i + 1;
result = s.substr(i, j - i + 1);
}
}
}
return result;
}
//以一个或两个为中心 由中心向两边扫 O(N^2)
string getSubString(string s, int left, int right)
{
while (left >= 0 && right < s.size() && s[left] == s[right]) {
left--;
right++;
}
return s.substr(left + 1, right - left - 1);
}
string longestPalindrome(string s) {
if (s.size() < 1) return s;
string result = "";
for (int i = 0; i < s.size(); i++) {
int left = i, right = i;
string temp = getSubString(s, left, right);
if (temp.size()>result.size())
result = temp;
right = i + 1;
temp = getSubString(s, left, right);
if (temp.size()>result.size())
result = temp;
}
return result;
}