Redian新闻
>
请教一道leetcode原题: 最长回文子串
avatar
请教一道leetcode原题: 最长回文子串# JobHunting - 待字闺中
q*1
1
用java写的DP版本的解法,总是超时。改了很多天还是不行,有谁能帮我看下啊?或者
给我一个能通过的DP的O(N2)版本学习一下,(我知道有O(n)的算法)谢谢大家了!
public class Solution {
public String longestPalindrome(String s) {
int n = s.length();
int longestBegin = 0;
int maxLen = 1;
int table[][] = new int[1000][1000];
for (int i = 0; i < n; i++) {
table[i][i] = 1;
}
for (int i = 0; i < n-1; i++) {
if (s.charAt(i) == s.charAt(i+1)) {
table[i][i+1] = 1;
longestBegin = i;
maxLen = 2;
}
}
for (int len = 3; len <= n; len++) {
for (int i = 0; i < n-len+1; i++) {
int j = i+len-1;
if (s.charAt(i) == s.charAt(j) && table[i+1][j-1]==1) {
table[i][j] = 1;
longestBegin = i;
maxLen = len;
}
}
}
return s.substring(longestBegin, longestBegin + maxLen - 1);
}
}
avatar
s*a
2
你这个好像也没DP上啊。。。好像还是全重跑了一遍。。。
avatar
q*1
3
谁能给我一个DP的看一下啊
avatar
s*a
4
你这么想 以没一个点为中心 往外找回文最多也就是O(n^2) DP再好也得O(n^2) 这个没
必要
avatar
q*1
5
你这个是头尾两个指针,外循环是从头部,内循环是从尾部, 然后检测每个子串,我
看到过这样的解法。但我就想问问如果根据标准的DP, 建个table,把对角线先变成1
,然后相邻两个的如果相等变成1,然后3个以上的,如果头尾相同,在看里面的是不是
1,我照这个想法写的,为什么不行呢? C++也是O(N2)就可以过。这是JAVA本身的缺陷吗

【在 s****a 的大作中提到】
: 你这么想 以没一个点为中心 往外找回文最多也就是O(n^2) DP再好也得O(n^2) 这个没
: 必要

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。