java - Why my DP algo for Longest Palindromic Substring is slow
问题描述
Hi I am trying to solve LeetCode Problem number 5 Longest Palindromic Substring. I am using the DP strategy that I increase value in the DP table by 2 if it's an odd palindrome and I increase it by 1 if it's an even one; and I keep track of the largest value in the table. I think my strategy is just O(n^2), but the running time is extremely long, which takes 280 ms. I tried to improve the subString() method by implementing a StringBuilder and append it myself, but it didn't help much. I really don't know why it's taking so long to run my code. Please help.
class Solution {
public String longestPalindrome(String s) {
int size = s.length();
int dp[][] = new int[size][size];
int len = 1;
int maxI=0;
int maxJ=0;
StringBuilder sb=new StringBuilder("");
for (int j = 0; j < size; j++) {
for (int i = 0; i <= j; i++) {
if (i == j) {
dp[i][j] = 1;
} else if(i<j){
if(s.charAt(i) == s.charAt(j)){
if((dp[i + 1][j - 1] > 0)){
dp[i][j] = dp[i + 1][j - 1] + 2;
}if((dp[i][j-1] == 1)){
dp[i][j] = 2;
}
}else {
dp[i][j] = 0;
}
}
if ( len<dp[i][j]||(len==dp[i][j] && j>maxJ) ){
len = dp[i][j];
maxI= i;
maxJ=j;
}
}
}
return s.substring(maxI, maxJ+1);
}
}
解决方案
推荐阅读
- windows - Powershell:别名和函数有什么区别?
- serilog - Serilog - RollingFile Sink 滚动失败基于大小
- elixir - `virtual: true` 对嵌入式模式有什么影响吗?
- c# - 等待文件,直到使用 C# 下载它
- c - 如何修复 mpegts_packetizer_pts_to_ts:没有足够的信息来计算 gstreeamer 中的正确时间戳
- python - 断言数组几乎等于零
- python - python:错误的解释器:没有这样的文件或目录
- .htaccess - .htaccess。如何在主页添加斜线?
- gatsby - 如何根据 queryString 参数在 Gatsby 中执行自定义/动态排序?
- bash - 在 bash 脚本中设置环境变量