I am trying to solve the Longest Palindromic Substring problem on LeetCode, and I have come up with a DP solution pasted below:
public class Solution {
String string;
boolean[][] visited;
String[][] results;
private boolean isPalindrome(String s){
String test = new StringBuilder(s).reverse().toString();
if(test.equals(s)) return true; else return false;
}
private String maxLengthString(String... args){
String result = new String();
for(String arg:args){
if(arg.length() > result.length()) result = arg;
}
return result;
}
private String findLongestPalindrome(int start,int end){
if(start >= end) return new String();
else if(start >= string.length() || start < 0) return new String();
else if(end <= 0 || end > string.length()) return new String();
else{
if(visited[start][end-1] == true) return results[start][end-1];
String result = new String();
if(this.isPalindrome(string.substring(start,end)))
result = maxLengthString(string.substring(start,end),
findLongestPalindrome(start+1,end),
findLongestPalindrome(start,end-1));
else result = maxLengthString(findLongestPalindrome(start+1,end),
findLongestPalindrome(start,end-1));
visited[start][end-1] = true;
results[start][end-1] = result;
return result;
}
}
public String longestPalindrome(String s) {
// Start typing your Java solution below
// DO NOT write main() function
string = s;
visited = new boolean[s.length()][s.length()];
results = new String[s.length()][s.length()];
return findLongestPalindrome(0,s.length());
}
}
The algorithm is quite straightforward, but the online judge complains about it not being efficient enough. I am just wondering if this algorithm is slow by nature (in which case I have to find another algorithm) or if it's something about my implementation.