我尝试使用递归来解决回文问题。我在线程“main”java.lang.StackOverflowError中得到了一个Exception at java.lang.String.substring(String.java:1969) 在Main.isPalindrome(Main.java:160)
但是,我不知道如何解决它。
public static boolean isPalindrome(String s) {
int len = s.length();
if (len <= 1) return true;
else {
char ch1 = Character.toLowerCase(s.charAt(0));
char ch2 = Character.toLowerCase(s.charAt(len - 1));
boolean check1 = Character.isLetter(ch1) || Character.isDigit(ch1);
boolean check2 = Character.isLetter(ch2) || Character.isDigit(ch2);
if (check1 && check2) {
if (ch1 == ch2) {
String shorter = s.substring(1, len - 1);
return isPalindrome(shorter);
}
else {
return false;
}
}
else if (!check1 && check2) {
String shorter = s.substring(1);
return isPalindrome(shorter);
}
else if (!check2 && check1) {
String shorter = s.substring(0, len - 1);
return isPalindrome(shorter);
}
else {
String shorter = s.substring(1, len - 1);
return isPalindrome(shorter);
}
}
}
答案 0 :(得分:0)
如果不确切知道哪一行是160,很难说。那就是说,你可能用与方法本身相同的参数来调用它,因此没有什么可以结束你的递归。
答案 1 :(得分:0)
你的逻辑没有错。只是存在有限的内存来保持堆栈帧,因此有限的递归级别。当输入字符串足够大时,将抛出StackOverflowError
。
我的建议是放弃这种递归实现,而是使用循环。