Java 这是执行递归检查字符串是否为回文的最有效方法吗?

Java 这是执行递归检查字符串是否为回文的最有效方法吗?,java,Java,在这里,我首先传递输入字符串0,input.length()我会这样写: public boolean isPalindrome3(String input, int index, int length) { if(index > (length-1-index)) return true; else if(input.charAt(index)!=input.charAt(length-1-index)) return false;

在这里,我首先传递输入字符串0,input.length()

我会这样写:

public boolean isPalindrome3(String input, int index, int length)
{
    if(index > (length-1-index))
        return true;

    else if(input.charAt(index)!=input.charAt(length-1-index))
        return false;

    else
        return isPalindrome3(input, index + 1, length);



}
public boolean isPalindrome(字符串str,int offset)
{    
int rightcoffset=str.length()-offset-1;

如果(offset我会这样写:

public boolean isPalindrome3(String input, int index, int length)
{
    if(index > (length-1-index))
        return true;

    else if(input.charAt(index)!=input.charAt(length-1-index))
        return false;

    else
        return isPalindrome3(input, index + 1, length);



}
public boolean isPalindrome(字符串str,int offset)
{    
int rightcoffset=str.length()-offset-1;

如果(offset如果不必使用递归,这里有一个更有效的回文检查:

public boolean isPalindrome(String str, int offset)
{    
    int rightOffset = str.length() - offset - 1;
    if (offset <= rightOffset)
    {
        char c1 = str.charAt(offset);
        char c2 = str.charAt(rightOffset);
        if (c1 != c2) return false;

        return isPalindrome(str, offset + 1);
    } else
    {
        return true;
    }
}
public boolean isPalindrome3(字符串输入)
{
对于(int start=0,end=input.length()-1;start
如果不必使用递归,这里有一个更有效的回文检查方法:

public boolean isPalindrome(String str, int offset)
{    
    int rightOffset = str.length() - offset - 1;
    if (offset <= rightOffset)
    {
        char c1 = str.charAt(offset);
        char c2 = str.charAt(rightOffset);
        if (c1 != c2) return false;

        return isPalindrome(str, offset + 1);
    } else
    {
        return true;
    }
}
public boolean isPalindrome3(字符串输入)
{
对于(int start=0,end=input.length()-1;start
公共静态字符串反向限制(字符串s){
字节[]数组=s.getBytes();
字节交换;
对于(int i=0,j=array.length-1;i
公共静态字符串反向限制(字符串s){
字节[]数组=s.getBytes();
字节交换;
对于(int i=0,j=array.length-1;i
我只需要传递
开始
结束
索引。传递
长度
(除了已经是字符串的属性外)需要额外的数学运算。然后递归案例是
f(str,start+1,end-1)
,这更容易[对我来说]也要可视化..递归性对于检查字符串是否是回文是不必要的。它是正确的,可能没有其他版本,但它的效率低于非递归版本。@Razvan作为一般规则,当请求非必要的递归时,它是家庭作业。corsiKa我向你保证,它不是家庭作业。我通常不需要用最简单的方法实现递归,我在某个地方读到了这个问题,上面说你需要使用递归。正如你所看到的,我已经实现了一些正确的东西,我不是不懂。我在上面贴了一个问题,因为我认为如果有更简单的方法,使用SO的全部目的是通过学习来提高你的技能我不知道你从哪里读到你需要使用递归,但这绝对是错误的。使用迭代很容易,任何(合理的)迭代解决方案都比使用递归更有效。我只需要传递
开始
结束
索引。传递
长度
(除了已经是字符串的一个属性之外)还需要额外的数学运算。然后递归的大小写是
f(str,start+1,end-1)
,这更容易[对我来说]也要可视化..递归性对于检查字符串是否是回文是不必要的。它是正确的,可能没有其他版本,但它的效率低于非递归版本。@Razvan作为一般规则,当请求非必要的递归时,它是家庭作业。corsiKa我向你保证,它不是家庭作业。我通常不需要用最简单的方法实现递归,我在某个地方读到了这个问题,上面说你需要使用递归。正如你所看到的,我已经实现了一些正确的东西,我不是不懂。我在上面贴了一个问题,因为我认为如果有更简单的方法,使用SO的全部目的是通过学习来提高你的技能我不知道你在哪里读到你需要使用递归来实现这一点,但这绝对是错误的。使用迭代和任何(理智的)方法都很容易做到迭代解决方案比使用递归更有效。你为什么要这样写呢?它需要一个乘法,在检查你是否已经完成之前,它会查找字符。(顺便说一下,OP的代码也只经过字符串的一半。)@TedHopp:Fair point,我编辑过它:)乘法是为了确保我们只检查字符串的一半。(编辑到你的编辑:哦,是的。确实,我现在明白了。有点混乱的代码)@TedHopp:是的,确实。你又对了:)但我做得更好,检查新代码:)为什么每次计算字符串长度比传递长度参数更好?@菲尼克斯:也许你是C++的家伙?但是字符串。Java中的方法只返回一个int。它不计算长度。字符串的长度作为类成员存储在string类中。为什么要这样编写?它需要一个乘法,并在检查是否已经完成之前查找字符。(顺便说一句,OP的代码也只经过字符串的一半。)@TedHopp:Fair point,我编辑了它:)乘法是为了确保我们只检查字符串的一半。(编辑到您的编辑:哦,是的。我现在确实明白了。代码有点混乱)@ TedHopp:是的,确实。你又对了:“但是我做得更好,看看新代码:”为什么每次计算字符串长度比传递长度参数更好?@菲尼克斯:也许你是C++的家伙?但是字符串。Java中的方法只返回一个int。它不计算长度。字符串的长度作为类成员存储在string类中。