【发布时间】:2018-10-05 03:42:06
【问题描述】:
我不知道为什么我的解决方案只适用于某些字符串。例如,“sdfbananabasdf”将返回“bananab”,但“dtattarrattatddetartrateedre”将在无限循环中运行。提前谢谢!
public String longestPalindrome(String s) {
if(isPalindrome(s)) {
return s;
}
String divisionOne = longestPalindrome(s.substring(0,s.length()-1));
String divisionTwo = longestPalindrome(s.substring(1,s.length()));
return (divisionOne.length() >= divisionTwo.length()) ? divisionOne : divisionTwo;
}
private boolean isPalindrome(String s) {
if(s.length() == 1) {
return true;
}
int count = s.length() / 2;
if(s.length() % 2 == 1) {
count++;
}
for(int i = 0; i < count; i++) {
if(s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
return true;
}
【问题讨论】:
-
你怎么知道是无限循环?你的算法的时间复杂度是多少?
-
我知道您的问题指定了递归,但您可能对在线性时间内找到最长回文子串的非递归算法感兴趣:Manacher's algorithm
-
首先找到一个尽可能小的输入,因为你的算法会失败。其次,使用调试器或任何类型的调试输出逐步比较您的算法所做的与您期望的结果。
标签: java string algorithm palindrome