Überprüfen Sie für Palindrom rekursiv
Habe ich eine Klasse, die prüft, ob ein string ein Palindrom ist oder nicht. Ich habe zwei Fragen.
1) Ist dies der effizienteste Weg, um zu überprüfen, für Palindrom?
2) Kann dies umgesetzt werden rekursiv?
public class Words {
public static boolean isPalindrome(String word) {
String pal = null;
word = word.replace(" ", "");
pal = new StringBuffer(word).reverse().toString();
if (word.compareTo(pal) == 0) {
return true;
} else {
return false;
}
}
}
Haben eine test-Klasse, um dies zu testen... Zweifel gebraucht, aber hier ist es sowieso, wenn jemand kümmert sich um zu versuchen, es aus zu sein in der Lage, mir zu helfen, mit jedem der beiden oben genannten Fragen...
public class testWords {
public static void main(String[] args) {
if (Words.isPalindrome("a") == true) {
System.out.println("true");
} else {
System.out.println("false");
}
if (Words.isPalindrome("cat") == true) {
System.out.println("true");
} else {
System.out.println("false");
}
if (Words.isPalindrome("w o w") == true) {
System.out.println("true");
} else {
System.out.println("false");
}
if (Words.isPalindrome(" a ") == true) {
System.out.println("true");
} else {
System.out.println("false");
}
if (Words.isPalindrome("mom!") == true) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
vielen Dank im Voraus für jede Hilfe und oder-Eingang 🙂
Die man vielleicht ändern möchte, was für Sie gültige Zeichen bei der Entscheidung, ob ein Satz ein Palindrom ist. Zum Beispiel, "Madam, ich bin Adam" ist ein Palindrom.
also sollte ich versuchen, mein Programm zu ignorieren Zeichen wie "' "
stackoverflow.com/questions/1579977/...
Zunächst herauszufiltern, die nicht-alphanumerische Zeichen enthalten, prüfen Sie, ob es ein Palindrom ist.
also sollte ich versuchen, mein Programm zu ignorieren Zeichen wie "' "
stackoverflow.com/questions/1579977/...
Zunächst herauszufiltern, die nicht-alphanumerische Zeichen enthalten, prüfen Sie, ob es ein Palindrom ist.
return (word.compareTo(pal) == 0)
spart auf die if
.InformationsquelleAutor choloboy7 | 2013-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Umsetzung einer 'palindrome check' rekursiv ist, müssen Sie vergleichen, wenn das erste und das Letzte Zeichen sind die gleichen. Wenn Sie sind nicht identisch die Zeichenfolge ist sicherlich nicht ein Palindrom. Wenn Sie die gleiche Zeichenfolge könnte ein Palindrom ist, müssen Sie vergleichen die 2. Charakter mit dem 2. bis zum letzten Zeichen, und so weiter, bis Sie strikt weniger als 2 Zeichen, die aber noch geprüft werden, in Ihrem string.
Einen rekursiven Algorithmus würde dann so Aussehen:
Hinweis, dass mein Rekursion Methode ist nicht der effizienteste Ansatz, aber
einfach zu verstehen
Marimuthu Madasamy hat eine effizientere rekursive Methode, ist aber schwerer zu verstehen
das ist die besten Ansatz für die Implementierung, da es nicht die Ursache für - stack overflow Fehler
Ich denke du meinst word.length() < 2 für Ihre base case.
Sie sind richtig, vielen Dank für das Auffinden der typo
Verdammt, dachte ich, ich Feste, dass
internalPalindromeCheck
sollte diecheckPalindrome
Methode.die
word.replaceAll("[^a-zA-Z0-9]","");
ist ein statement, erzählen java, um die Zeichenfolge in Anspruch nehmen, finden alle nicht alphanumerischen Zeichen, und ersetzen Sie Sie durch eine leere Zeichenkette. Der verwirrende Teil ich nehme an der"[^a-zA-Z0-9]"
. Dies nennt man eine Regulärer Ausdruck (RegEx), sind Sie ein leistungsfähiges und vielseitiges Werkzeug. Definitiv lohnt sich zu lernen in der Zeit.InformationsquelleAutor recursion.ninja
Hier ist eine weitere rekursive Lösung aber mit array, das könnte Ihnen einige performance-Vorteil gegenüber den string in rekursive Aufrufe (wobei
substring
odercharAt
).Die Idee ist, dass wir verfolgen zwei Positionen im array, eine am Anfang und eine andere am Ende, und wir halten das verschieben der Positionen in Richtung der Mitte.
Wenn die Positionen überlappen, und übergeben wir fertig sind, vergleichen Sie alle Zeichen und alle Zeichen so weit angepasst haben; die Zeichenfolge ist Palindrom.
In jedem Durchlauf vergleichen wir die Charaktere-und wenn Sie nicht übereinstimmt, dann wird die Zeichenfolge nicht Palindrom-sonst verschieben sich die Positionen näher.
sicher, lassen Sie mich zu erweitern, dass ein wenig.
+1 für eine tolle Erklärung und slick-code!
InformationsquelleAutor Marimuthu Madasamy
Es ist eigentlich ausreichend, um nur zu überprüfen, bis zu der Mitte-Zeichen, um zu bestätigen, dass es ein Palindrom, was bedeutet, Sie vereinfachen es, bis auf so etwas wie dieses:
Einer rekursiven Lösung ist sehr gut möglich, aber es wird nicht geben Sie jede Leistung (und wahrscheinlich nicht so gut lesbar).
Da Sie bereits überprüft die zweite Hälfte, Wenn Sie den ersten Charakter, vergleichen Sie es, um die Letzte, wenn Sie vergleichen die 2. Charakter, vergleichen Sie es, um die 2 letzten. Wenn Sie in der Mitte alle Buchstaben verglichen worden.
natürlich 🙂 macht voll Sinn, jetzt, danke!
InformationsquelleAutor Joe F
JA
Hier ist ein Beispiel:
also heißt es, außer für 0 Länge Wort, es ist in Ordnung, für alle anderen Worte..richtig?
InformationsquelleAutor Vishal K
Meine zwei Cent. Es ist immer schön zu sehen die verschiedenen Möglichkeiten, die Menschen lösen ein problem. Natürlich ist dies nicht der effizienteste Algorithmus, der Speicher oder die Geschwindigkeit klug.
InformationsquelleAutor Hlodowig