Java / Palindrom rekursiv erkennen: Kann mir jemand sagen, wo in meinem Code der Fehler liegt?
Hallo,
ich habe eine Methode geschrieben, die mir true oder false liefert, falls der übergebene String ein Palindrom ist oder nicht. Da ich es rekursiv versuche, habe ich leider Schwierigkeiten.
Kann mir jemand sagen, wo der Fehler liegt? Danke schon mal!
public static void main(String[] args) {
String s = "aknna";
int length = s.length();
System.out.println(isPalindrom(s, length));
}
public static boolean isPalindrom(String s, int length) {
if (s.length() < 1) {
return true;
}
if (s.charAt(0) != s.charAt((s.length() - 1))) {
return false;
}
return isPalindrom(s, length - 1);
}
2 Antworten
Du vergleichst in jedem Durchlauf mit dem ersten Buchstaben des Wortes.
Du solltest einfach rekursiv die Methode mit dem Parameter s.substring(1, s. length-1) aufrufen. Dann müsstest du der Methode auch nicht mehr die Länge des Strings als Parameter übergeben.
Hast natürlich recht, aber ich wollt halt eine Lösung , die die Methode des Fragestellers möglichst wenig verändert und trotzdem funktioniert.
Bei einem Palindrom vergleichst du ja immer paarweise aufeinanderfolgende Gruppen, also beim Wort der Länge 6 vergleichst du Buchstabe 1 mit 6, Buchstabe 2 mit 5, Buchstabe 3 mit 4 ...
Und jetzt schau dir mal deine Funktion an
if (s.charAt(0) != s.charAt((s.length() - 1))) {
Kleiner Tipp:
- übergib deiner Methode ZWEI Indizes. Einer zählt von 0 nach oben, einer von s.length() - 1 nach unten. Sobald der erste größer oder gleich der zweite ist, kannst du wahr zurückgeben
- erstell eine überladene Methode, die NUR das Wort nimmt, und rufe in dieser deine Palindrom-Methode mit allen nötigen Parametern initial auf
Ein Substring ist suboptimal, da du ja jedes mal einen neuen String erstellst. Klar, bei kurzen Worten ist das kein Problem, aber man kann ja dennoch auf Effizienz schauen