【发布时间】:2019-07-05 01:44:00
【问题描述】:
我已经编写了我的方法版本来测试一个单词是否是回文。它似乎适用于奇数长度的字符串,但在使用偶数长度进行测试时会发生 String Out of Bound Exception 错误。
任何帮助将不胜感激!
public static boolean palindrome(String s, int start, int end) {
int length = s.length();
if (length%2 != 0 && start != end) {
if (s.charAt(start) == s.charAt(end)) {
return palindrome(s,start+1,end-1);
}
else {
return false;
}
}
else if(length%2 == 0 && (start+1) != (end-1)) {
if (s.charAt(start) == s.charAt(end)) {
return palindrome(s,start+1,end-1);
}
else {
return false;
}
}
else if(length%2 != 0 && start == end) {
return true;
}
else if(length%2 == 0 && start+1 == end-1) {
if (s.charAt(start+1) == s.charAt(end-1)) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
【问题讨论】:
-
我可能是个盲人,但是你在哪里检查
s是否不为空、start不是负数以及end是否大于s.length()? -
如果出现以下情况,您会遇到问题:
else if(length%2 == 0 && (start+1) != (end-1))和else if(length%2 == 0 && start+1 == end-1)。将字符串 aa 作为输入,它是一个回文。 start 为零,end 为 1。当我们遇到这些情况之一时 start+1 = 1 和 end-1 = 0 并且您再次调用该方法并将获得索引超出范围异常。您不能增加/减少两个指数。尝试只增加/减少一个。 -
感谢所有建议 - 我现在就试试!
-
真的需要这样实现回文函数吗?如果可以,为什么不直接使用支票
s.equals(new StringBuilder(s).reverse().toString()) -
我需要在我的方法中加入递归!我知道它效率低下,但我想在我有一个工作代码之后我会担心这个。
标签: java string recursion indexoutofboundsexception palindrome