在众所周知的递归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匹配
返回带有参数isPalindromes.substring(1, 1)结果,该结果是从位置1到位置1之前的文本范围,换句话说,是一个空字符串
在以空字符串作为输入的递归调用中,isPalindrome将匹配长度的第一个条件,而return true


记录下来,这是检查Java回文的一种非常低效的方法,
因为substring创建新的字符串,这很慢。
通过添加开始和结束索引参数并将它们向内移动,直到它们之间的差变为0或1,可以实现更有效的递归解决方案。

10-06 05:24