Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Aufgabe zur Überprüfung der richtigen Platzierung von Klammern (Ruby)

Beitrags-Cover: Aufgabe zur Überprüfung der richtigen Platzierung von Klammern (Ruby)
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Die Bedingung für die Aufgabe ist folgende. Erstellen Sie die Funktion valid_braces, die einen String akzeptiert, der nur aus Klammern besteht: ()[]{}.
 Die Funktion sollte true zurückgeben, wenn alle Klammern in der richtigen Reihenfolge geöffnet und geschlossen werden, oder false — wenn die Klammern inkorrekt angeordnet sind.
Beispiel für die Ausführung der Methode:
valid_braces("()")         → true  
valid_braces("({[]})")     → true  
valid_braces("({[)]}")     → false  
valid_braces("(((()")      → false  
valid_braces("{[()]}[]")   → true

Wie funktioniert die Klammerüberprüfung?

Diese Aufgabe wird klassisch mit einem Stack gelöst — einer Datenstruktur, die nach dem Prinzip „Last In, First Out“ funktioniert.
Die Idee besteht darin, öffnende Klammern in den Stack hinzuzufügen, und wenn wir auf eine schließende Klammer stoßen — zu überprüfen, ob sie der Klammer an der Spitze des Stacks entspricht. Wenn ja — entfernen wir sie aus dem Stack; wenn nein — ist der String ungültig.

Test (RSpec) zur Überprüfung der Methode

RSpec.describe '#valid_braces' do
  it 'gibt true für gültige Klammern zurück' do
    expect(valid_braces('()')).to eq(true)
    expect(valid_braces('([])')).to eq(true)
    expect(valid_braces('{[()]}')).to eq(true)
    expect(valid_braces('{[()]}[]')).to eq(true)
  end

  it 'gibt false für ungültige Klammern zurück' do
    expect(valid_braces('[(])')).to eq(false)
    expect(valid_braces('({[)]}')).to eq(false)
    expect(valid_braces('((')).to eq(false)
    expect(valid_braces(']')).to eq(false)
  end
end

Methode valid_braces

def valid_braces(string)
  stack = []
  pairs = { ')' => '(', ']' => '[', '}' => '{' }

  string.each_char do |char|
    if pairs.values.include?(char)
      stack.push(char)
    elsif pairs.keys.include?(char)
      return false if stack.pop != pairs[char]
    end
  end

  stack.empty?
end

Funktionsweise des Algorithmus

  1. Jedes Mal, wenn wir eine öffnende Klammer sehen — fügen wir sie dem Stack hinzu.
  2. Wenn wir auf eine schließende stoßen — vergleichen wir sie mit der letzten öffnenden (von der Spitze des Stacks).
  3. Wenn sie übereinstimmen — machen wir weiter.
  4. Wenn nicht — geben wir sofort false zurück.
  5. Wenn der Stack nach dem Durchlauf des Strings leer ist — wurden alle Klammern korrekt geschlossen, also geben wir true zurück.
Dieser Ansatz kann für Paarzeichen beliebigen Typs verwendet werden — nicht nur für Klammern. Er eignet sich hervorragend zur Überprüfung der Richtigkeit von verschachtelten Strukturen, beispielsweise in Parsern oder HTML-Analyzern.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Wie helfen Scratch-Kurse Kindern, Soft Skills zu entwickeln?
11. Apr, 18:24 Uhr

Wie helfen Scratch-Kurse Kindern, Soft Skills zu entwickeln?

meme code
meme code@memecode
24. Apr, 20:17 Uhr

Wir fixieren minikube "Sie versuchen, die amd64-Binärdatei auf einem M1-System auszuführen."

meme code
meme code@memecode
24. Apr, 20:55 Uhr

Wir fixieren minikube auf dem Mac mit M1 (wir verzichten auf qemu, starten auf docker)

meme code
meme code@memecode
Wo findet man eine ältere Version von Google Chrome und lädt sie herunter? Am Beispiel eines alten Macs.
25. Apr, 23:02 Uhr

Wo findet man eine ältere Version von Google Chrome und lädt sie herunter? Am Beispiel eines alten Macs.

meme code
meme code@memecode
09. Mai, 19:27 Uhr

[FIXED] kann solche Datei nicht laden -- html/pipeline (LoadError) tritt auf während rails generate thredded:install

meme code
meme code@memecode
Aufgabe: Umwandlung einer römischen Zahl in eine Dezimalzahl (Ruby)
20. Mai, 12:05 Uhr

Aufgabe: Umwandlung einer römischen Zahl in eine Dezimalzahl (Ruby)

meme code
meme code@memecode
Wie man das Teilarray mit der maximalen Summe (Maximum Subarray Sum) in Ruby findet
22. Mai, 11:01 Uhr

Wie man das Teilarray mit der maximalen Summe (Maximum Subarray Sum) in Ruby findet

meme code
meme code@memecode
Google-Werbung für Anfänger: Schritt-für-Schritt-Anleitung für einen erfolgreichen Start
28. Mai, 10:21 Uhr

Google-Werbung für Anfänger: Schritt-für-Schritt-Anleitung für einen erfolgreichen Start

meme code
meme code@memecode
Was ist jemalloc und wie hängt es mit Ruby / Ruby on Rails zusammen
30. Mai, 11:53 Uhr

Was ist jemalloc und wie hängt es mit Ruby / Ruby on Rails zusammen

meme code
meme code@memecode
05. Jun, 01:52 Uhr

[Fixed] nicht initialisierte Konstante ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)

meme code
meme code@memecode
Die Vorschau im Netzwerk-Tab ist nach dem Update von Chrome sehr klein geworden.
05. Jun, 18:23 Uhr

Die Vorschau im Netzwerk-Tab ist nach dem Update von Chrome sehr klein geworden.

meme code
meme code@memecode
Was ist das HEIC-Format und warum ist es eine schlechte Idee, es einfach in .jpg umzubenennen?
15. Jun, 18:17 Uhr

Was ist das HEIC-Format und warum ist es eine schlechte Idee, es einfach in .jpg umzubenennen?

meme code
meme code@memecode