回文中的 substring() 方法
substring() method in a Palindrome
在众所周知的递归 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
??
它 return 是空字符串还是其他内容?
return isPalindrome(s.substring(1, s.length() - 1));
将 "loop" 通过发送没有第一个和最后一个字符的字符串值 — 或者从第二个到倒数第二个(a.k.a. 倒数第二个) .然后它会再次比较那个字符串;然后它将使用相同的例程再次 "loop"。
我认为你的 "confusion" 可能在于 s.length()
将 return 有多少个字符 s
(从 1
开始自然数.. N
);但是 s.substring(...)
与索引一起使用,它们以 0
开头(而不是 1
)。在那个 "fashion" 中,最后一个字符将是长度减一。
示例:
String example = "Five"; // ["F", "i", "v", "e"]
// 0 1 2 3 <--- indexes
// Length is four (it has 4 characters)
当 s
的值为 nn
时,当我们单步执行语句时,将发生以下情况:
s.length()
是2,所以第一个if
条件不符合
s.charAt(0)
是n
,s.charAt(1)
是n
,所以第二个if
匹配
- Return带参数
s.substring(1, 1)
的isPalindrome
的结果,即从位置1到位置1之前的文本范围,即空字符串
- 在以空字符串为输入的递归调用中,
isPalindrome
将匹配长度上的第一个条件,而return true
郑重声明,这是检查 Java 中回文的一种非常低效的方法,
因为 substring
创建新字符串,速度很慢。
通过添加开始和结束索引参数,并将它们向内移动,直到它们的差异变为 0 或 1,可以实现更有效的递归解决方案。
在众所周知的递归 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
??
它 return 是空字符串还是其他内容?
return isPalindrome(s.substring(1, s.length() - 1));
将 "loop" 通过发送没有第一个和最后一个字符的字符串值 — 或者从第二个到倒数第二个(a.k.a. 倒数第二个) .然后它会再次比较那个字符串;然后它将使用相同的例程再次 "loop"。
我认为你的 "confusion" 可能在于 s.length()
将 return 有多少个字符 s
(从 1
开始自然数.. N
);但是 s.substring(...)
与索引一起使用,它们以 0
开头(而不是 1
)。在那个 "fashion" 中,最后一个字符将是长度减一。
示例:
String example = "Five"; // ["F", "i", "v", "e"]
// 0 1 2 3 <--- indexes
// Length is four (it has 4 characters)
当 s
的值为 nn
时,当我们单步执行语句时,将发生以下情况:
s.length()
是2,所以第一个if
条件不符合s.charAt(0)
是n
,s.charAt(1)
是n
,所以第二个if
匹配- Return带参数
s.substring(1, 1)
的isPalindrome
的结果,即从位置1到位置1之前的文本范围,即空字符串 - 在以空字符串为输入的递归调用中,
isPalindrome
将匹配长度上的第一个条件,而return true
郑重声明,这是检查 Java 中回文的一种非常低效的方法,
因为 substring
创建新字符串,速度很慢。
通过添加开始和结束索引参数,并将它们向内移动,直到它们的差异变为 0 或 1,可以实现更有效的递归解决方案。