创建一个方法来反转数组 String[] 然后检查它是否是回文

Creating a method to reverse an array String[] and then checking if it is a palindrome

我必须创建两种方法。一个获取一组字符串并反转它们的顺序。用assertArrayEquals测试,向后的方法通过了。然后我必须创建一个方法来检查字符串数组是否为回文,但如果失败则进行测试。我想也许我在反向方法中搞砸了一些东西,但我测试了 12 种不同的方法。我可能真的很累,但我做错了什么?

public static String[] backwards(String[] array) {
    for (int index = 0; index < array.length / 2; index++) {
        String string = array[index];
        array[index] = array[array.length - index - 1];
        array[array.length - index - 1] = string;
    }
    return array;
}

public static boolean isPalindrome(String[] array) {
    if (array == backwards(array)) {
        return true;
    }
    return false;
}

这段代码有两处错误:

#1 您正在就地编辑数组。所以 backwards 方法不仅 return 一个反向数组,它改变了原始数组。

#2 您正在用 == 比较两个数组,这将检查它是否是同一个实例。您可以改用 Arrays.equals

public static String[] backwards(String[] array) {
    String[] resArray = new String[array.length];
    for (int index = 0; index < array.length; index++) {
        resArray[index] = array[array.length - index - 1];
    }
    return resArray;
}

public static boolean isPalindrome(String[] array) {
    return Arrays.equals(array, backwards(array));
}

因为 Java 9 你可以使用 IntStream.iterate and Arrays.compare 方法:

public static String[] backwards(String[] array) {
    return IntStream.iterate(array.length - 1, i -> i >= 0, i -> i - 1)
            .mapToObj(i -> array[i])
            .toArray(String[]::new);
}
public static boolean isPalindrome(String[] array) {
    return Arrays.compare(array, backwards(array)) == 0;
}
// test
public static void main(String[] args) {
    String[] arr = {"backwards", "palindrome", "abracadabra", "abcdcba"};

    System.out.println(isPalindrome(arr)); // false
    System.out.println(isPalindrome(arr[3].split(""))); // true
}