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

时间:2012-08-02 18:36:42

标签: java

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);



}

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

3 个答案:

答案 0 :(得分:3)

如果您不必使用递归,这里可以更有效地检查回文:

public boolean isPalindrome3(String input)
{
    for (int start = 0, end = input.length() - 1; start < end; ) {
        if (input.charAt(start++) != input.charAt(end--)) {
            return false;
        }
    }
    return true;
}

答案 1 :(得分:0)

我会这样写:

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;
    }
}

与您的代码存在差异:

  • 不要传递length,因为这是一个String属性
  • 解开角色比较
  • 漂亮的代码格式
  • 通过创建局部变量rightOffset来提高效率。

答案 2 :(得分:0)

public static String reverseString(String s) {       
    byte[] array = s.getBytes();
    byte swap;

    for( int i = 0, j = array.length - 1; i < array.length / 2; i++, j--) {
        swap = array[ j ];
        array[ j ] = array[ i ];
        array[ i ] = swap;
    }

    return (new String(array));
}

if(myString.equals(reverseString(myString)))
    // is palindrome