Problem:
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.
Analysis:
Dynamic programming. Brute-force method will take O(n^3) time units to finde solutions.
Solutions:
C++:
string longestPalindrome(string s) {
if(s.empty())
return "";
if(s.size() == 1)
return s;
int len = s.size();
bool bIsPalMatrix[len][len];
int start_max = 0;
int end_max = 0;
memset(bIsPalMatrix, false, len * len * sizeof(bool));
for(int i = 0; i < len; ++i)
bIsPalMatrix[i][i] = true;
for(int diff = 1; diff <= len - 1; ++diff) {
for(int start = 0; start < len - diff; ++start) {
int end = start + diff;
if(s[start] == s[end] && (start == end -1 || (start + 1 <= end - 1 && bIsPalMatrix[start + 1][end - 1]))) {
if(end_max - start_max < diff) {
start_max = start;
end_max = end;
}
bIsPalMatrix[start][end] = true;
}
}
}
return s.substr(start_max, end_max - start_max + 1);
}
Java:
Python: