在众所周知的递归isPalindrome
方法中
public static boolean isPalindrome(String s){
if(s.length() == 0 || s.length() == 1)
return true;
if(s.charAt(0) == s.charAt(s.length()-1))
return isPalindrome(s.substring(1, s.length()-1));
return false;
}
}
有一行我不太明白。例如,如果我们将字符串
anna
传递给isPalindrome method
,那么此行代码将执行什么操作return isPalindrome(s.substring(1, s.length()-1));
当
s
的值为nn
时如何处理字符串?在我的理解中,数字1(索引
1
)用于第二个字母n
,并且s.length()-1
等于2-1 = 1
,但不包括该索引位置,因此必须为索引0
?它返回空字符串还是其他?
最佳答案
当我们逐步浏览这些语句时,当s
的值为nn
时,会发生这种情况:s.length()
为2,因此第一个if
条件不匹配s.charAt(0)
是n
,并且s.charAt(1)
是n
,因此第二个if
匹配
返回带有参数isPalindrome
的s.substring(1, 1)
结果,该结果是从位置1到位置1之前的文本范围,换句话说,是一个空字符串
在以空字符串作为输入的递归调用中,isPalindrome
将匹配长度的第一个条件,而return true
记录下来,这是检查Java回文的一种非常低效的方法,
因为substring
创建新的字符串,这很慢。
通过添加开始和结束索引参数并将它们向内移动,直到它们之间的差变为0或1,可以实现更有效的递归解决方案。