Auf Thema antworten

Finde ich nicht entweder ich will die Länge eines Palindroms wissen oder ich möchte Spiegelungen im Array finden.

Die Funktion hat einen Rückgabewert der ein Länge widergibt.  Bei [1,7,2,5,2,7]  gibt es nach Aufgabestellung 3 mögliche Varianten

1) Palindrom --> 5   [7,2,5,2,7]

2) gespiegelter Teil --> 2  [7,2]

3) gespiegelter Teil mit Überschneidung --> 3  [7,2,5]


Bei [7,2,4,5,2,7]  und der Lösung [7,2] hat man kein Palindrom man hat nur einen Spiegelung im Array.

Hier eine Lösung für die Bedingung 2)

[CODE=java]public class Mirror {

    public static void main(String[] args) {

        int expected[] = { 3, 4, 5 };

        // [0] -> [7,6,5]

        // [1] -> [4,4,4,4]

        // [2] -> [2,4,4,4,3]

        int test[][] = { { 1, 7, 6, 5, 1, 8, 5, 6, 7 }, { 1, 7, 6, 5, 1, 8, 5, 6, 7, 4, 4, 4, 4, 4, 4, 4, 4 },

                { 1, 2, 4, 4, 4, 3, 4, 3, 4, 4, 4, 2, 7, 6, 5, 1, 8, 5, 6, 7, 0, 9 } };

        for (int i = 0; i < test.length; i++)

            System.out.printf("test[%d] is expected %d, got %d\n", i, expected[i], Mirror.maxMirror(test[i]));

    }


    public static int maxMirror(int[] arr) {

        return maxMirrorFromLeft(arr);

    }


    private static int maxMirror(int[] arr, int start) {

        int max = 0;

        int right = arr.length - 1;

        int left = start;

        while (right > left) {

            if (arr[left++] == arr[right]) {

                max++;

            } else

                left = start;

            right--;

        }

        return max;

    }


    private static int maxMirrorFromLeft(int[] arr) {

        int max = 0;

        int len = arr.length;

        int left = 0;

        do {

            max = Math.max(maxMirror(arr, left), max);

            left++;

        } while (left < len - 1 - max);

        return max;

    }

}[/CODE]



Oben