Rekursiv überprüfen, ob ein String symmetrisch ist
Möchte ich überprüfen, ob ein String hat passende Klammern, Klammern.
For example:
{}
()
[]
Ich kann es mit einem stack. Ich möchte es mit Rekursion. Ich war das Lesen der Antworten für eine ähnliche Frage und die Antworten wurden Rekursion gemischt und in einen Stapel. Ein Benutzer reagiert auf die Antworten, die sagen, dass die Rekursion ist auch ein Stapel, damit Ihre rekursive Methode sollte nicht auf einen Stapel in der Parameter-das macht Sinn für mich.
Ich habe ein großes problem, obwohl, ich bin auf der Suche, die durch den String rückwärts und immer das entfernen der letzten Stelle, die ich überprüfen, bis der String leer, so dass ich true zurück. Ich kann nicht Bild wie überprüfe ich für die einzelnen Teile, Klammern, Klammern oder Klammern, ohne dass ich einen zusätzlichen parameter in meine Methode zu halten, was ich Suche. Aber ich denke immer es muss einen einfacheren Weg, dies zu tun.
public boolean isBalanced(String in)
{
if(in.isEmpty())
return true;
if(in.charAt(in.length()) == '}')
{
return recIsBalanced(in.substring(0, in.length()));
}
else if(in.charAt(in.length()) == ']')
{
}
return recIsBalanced(in.substring(0, in.length()));
}
- Nur aus Neugier. Was für einen Vorteil Sie versuchen, zu gewinnen tun Sie dies rekursiv statt iterativ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachste Weg, um zu lösen dieses problem mithilfe von Rekursion ist zum verkleinern der string aus beiden Richtungen. Sie Durchlaufen von Links und von rechts, bis Sie sehen . Wenn diese nicht übereinstimmen, String ist nicht ausgeglichen, ansonsten gelten die gleichen Algorithmus für die eingeschlossene Zeichenfolge, die zwischen diesen geschweiften Klammern. Geht nur von der einen Seite wird viel schwieriger, und Sie haben zu speichern Zustand.
EDIT: Dank DanielFischer. Tatsächlich Durchlaufen von einer Seite, z.B. Links, bis Sie finden eine Stütze(wenn diese Klammer nicht öffnen Sie eine Rückkehr
false
). Als Iteration von der anderen Seite(in diesem Fall rechten), bis Sie eine passende Klammer. Nun die Zeichenfolge ist ausgeglichen, wenn und nur wenn die Teilzeichenfolge eingeschlossen innerhalb dieser Klammern ist symmetrisch und die Zeichenfolge rechts neben der schließenden Klammer sind sowohl mit symmetrischen als auch mit Rekursion."()[]{}"
ausgewogen ist. Dein test würde sagen, das ist es nicht.(
und als Iteration von rechts(in der gleichen Ebene der Rekursion keine rekursiven Aufruf noch) und finden)
. Dann machen Sie eine rekursive Aufrufe für die Teilzeichenfolge zwischen(
und)
und der Abschnitt auf der rechten)
."()()"
durch Rücksendung "unausgewogen" und"([)]"
durch Rücksendung "ausgewogen".Hier ist die Lösung, nicht das ersetzen von allem, gerade Rekursion:
Es getan werden kann, durch analysieren der eingegebenen Zeichenfolge. Grammatik für diesen Fall ist:
Ist es einfacher, um die position zu verfolgen, was analysiert wird, in einen string, und dass der Rekursion-stack hält, was Klammer geschlossen werden. Hier ist ein einfaches python-Implementierung.