0
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()

4

3 回答 3

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;
}
于 2012-08-02T19:01:27.623 回答
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
于 2012-12-13T19:20:21.550 回答
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 提高了效率。
于 2012-08-02T18:45:20.057 回答