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]