Java N-回文问题,需要确定第二个终止案例
此递归方法根据n的值查找字符串的回文。其中n是每次比较的字符数 如果n是2,那么“abab”是回文,因为ab和abJava N-回文问题,需要确定第二个终止案例,java,recursion,palindrome,Java,Recursion,Palindrome,此递归方法根据n的值查找字符串的回文。其中n是每次比较的字符数 如果n是2,那么“abab”是回文,因为ab和ab public static boolean nDrome(String s, int n) { if(s.isEmpty()) return true; else if( s.length() == 3 ) return true; else { if(s.substring(
public static boolean nDrome(String s, int n)
{
if(s.isEmpty())
return true;
else if( s.length() == 3 )
return true;
else
{
if(s.substring(0,n).equals( s.substring(s.length()-n) ) )
return nDrome( s.substring(n, s.length()-n), n);
else
return false;
}
}
问题在于我的第二个if语句。
让我们考虑例如:
nDrome(“abcdefgcdab”,2)代码>
这是一个回文,因为
AB,CD,EFG,CD,AB
请注意中间项是如何不计算的,因此在本例中,代码是有效的,因为if中有一个硬编码值3。现在,如果我改变n值,它将不再正常工作。如何确定第二个if语句的值?@ElliottFrisch但在n=1的情况下,您不知道长度是多少吗?它会从一开始就返回true“注意中间项如何不起作用”您如何定义“中间项”使其不起作用?什么使它“不算数”?换一种方式问,N回文的定义是什么?我似乎找不到与您正在做的事情相匹配的定义。@Andreas因为没有其他值可与之比较,所以中间项根本不算数,所以本例中的中间项由3个字符组成。n是2。3-n会给你1,这是不够的比较。比较必须是一对n个字符与另一对n个字符的比较。希望有帮助@另一个例子是经典的“赛车”。nDrome(“赛车”,1)。被比较的项是r和r,a和a,c和c,但现在你只剩下“e”,这是本例中的中间项。因此,如果中间项的长度小于2*n,那么可以忽略它?在您的示例中,可以忽略3长度的中间项,但2长度或1长度的中间项也可以忽略?若否,原因为何?