Inhaltsverzeichnis
Entfernen Sie öffnende und schließende Klammern von der Zeichenfolge
Grammatik
Algorithmus
Code
In diesem Code prüfen wir alle möglichen Kombinationen von Teilsequenzen, was zu einer exponentiellen Zeitkomplexität führt. Bei größeren Eingaben ist diese Methode möglicherweise nicht effizient.
Methode 2
Beispiel
Diese dynamische Programmierlösung berechnet die Mindestanzahl an Löschungen, die erforderlich sind, um alle ausgeglichenen Klammerteilsequenzen zu leeren. Es durchläuft die Zeichenfolge, aktualisiert eine eindimensionale DP-Tabelle mit der Anzahl der linken Klammern und gibt den endgültigen DP-Wert als minimal zu entfernenden Betrag zurück.
Fazit
Grundlegende Konzepte der C-Sprache, z. B. was der Unterschied zwischen Zeichen- und Zeichenfolgendatentypen ist, Zeichenfolgentrennzeichen, Initialisierung von Zeichenfolgen und Arrays, Berechnung der Position, an der das erste Zeichen des Arrays Index 0 ist und das letzte Zeichen verwendet wird im Programm Muss leer sein, um eine korrekte Ausgabe zu erhalten.
Heim Backend-Entwicklung C++ Berechnen Sie die Anzahl der Paare, die entfernt werden müssen, damit alle Teilsequenzen mit ausgeglichenen Klammern leer sind

Berechnen Sie die Anzahl der Paare, die entfernt werden müssen, damit alle Teilsequenzen mit ausgeglichenen Klammern leer sind

Sep 04, 2023 pm 12:57 PM
Halterung passend Anzahl Paare ausgewogene Klammern

Berechnen Sie die Anzahl der Paare, die entfernt werden müssen, damit alle Teilsequenzen mit ausgeglichenen Klammern leer sind

Der C-Compiler behandelt Zeichenfolgen als Arrays von Zeichen, sodass es einfach ist, Zeichen anhand ihrer Position aus einer Zeichenfolge zu entfernen. Die erste und letzte Position der Zeichenfolge müssen auf das Vorhandensein von Klammern überprüft und entfernt werden. Der String kann in eine andere Variable kopiert und angezeigt werden.

Es gibt viele vordefinierte Funktionen in C, die effizient zum Bearbeiten von Zeichenfolgen verwendet werden können. In der Sprache C ist das Löschen eines Zeichens an der Anfangs- oder Endposition mithilfe von Funktionen einfach.

Entfernen Sie öffnende und schließende Klammern von der Zeichenfolge

Klammern sind einzelne Zeichen, die Teil der Eingabezeichenfolge sind und gemäß der unten angegebenen Logik und dem unten angegebenen Algorithmus aus der Zeichenfolge entfernt werden können

Character ist jede alphanumerische Taste, die wir auf der Tastatur sehen, und sie wird in der Zeichenvariablen in C gespeichert.

() werden in c Klammern genannt. Wir müssen dieses Zeichen in der vom Benutzer eingegebenen Zeichenfolge identifizieren und aus der Zeichenfolge entfernen.

Ein Array ist eine Variable, die über viele Speicherorte verfügt, die durch einen einzelnen Namen und eine fortlaufende Nummer adressiert werden, während ein String ein Array aus Zeichen ist.

Es gibt viele Situationen, in denen wir Klammern aus Zeichenfolgen entfernen müssen, beispielsweise beim Lösen regulärer Ausdrücke.

Grammatik

Die Funktion countRemoval akzeptiert die Zeichenfolge str als Eingabe und gibt einen ganzzahligen Wert zurück, der die Anzahl der Entfernungspaare darstellt, die erforderlich sind, um alle Teilsequenzen mit ausgeglichenen Klammern in der Zeichenfolge leer zu machen. Die Funktion verwendet die Variable count, um die Anzahl der erforderlichen Löschungen zu verfolgen, die zunächst auf 0 gesetzt ist. Außerdem wird die Variable Balance verwendet, um das Gleichgewicht zwischen der Anzahl der öffnenden und schließenden Klammern in der Zeichenfolge zu verfolgen. Die Funktion iteriert dann über die Länge der Zeichenfolge und überprüft das Zeichen an jedem Index. Wenn es sich bei dem Zeichen um eine linke Klammer handelt, wird der Saldo um 1 erhöht, und wenn es sich um eine rechte Klammer handelt, wird der Saldo um 1 verringert. Wenn der Saldo negativ wird, bedeutet dies, dass es eine zusätzliche rechte Klammer gibt, die Anzahl der Entfernungen plus 1 ist und der Saldo auf 0 zurückgesetzt wird. Nach der Schleife wird die Zählung aktualisiert, um den Restsaldo dividiert durch 2 als den Löschbetrag einzubeziehen, der erforderlich ist, um alle Teilsequenzen der Ausgleichsklammer in der Zeichenfolge leer zu machen.

int countRemoval(string str) {
   int count = 0;
   int balance = 0;
   for (int i = 0; i < str.length(); i++) {
      if (str[i] == '(') {
         balance++;
      } else {
         balance--;
      }
      if (balance < 0) {
         count++;
         balance = 0;
      }
   }
   count += balance / 2;
   return count;
} 
Nach dem Login kopieren

Algorithmus

  • Schritt 1 – Deklarieren Sie str1, str2, initialisiert auf Null.

  • Schritt 2 – Ganzzahlvariablen len,n,i deklarieren

  • Schritt 3 – Akzeptieren Sie str1 von der Konsole

  • Schritt 4 – Überprüfen Sie, ob das erste Zeichen (

  • ist
  • Schritt 5 – wenn n = 1

  • Schritt 6 – Wenn n

  • Schritt 7 – Überprüfen Sie, ob das letzte Zeichen von str2 ) ist.

  • Schritt 8 – Wenn ja, ersetzen Sie es durch

  • Schritt 9

    – Drucken Sie str2 mit dem Minuszeichen der Eingabezeichenfolge ().

  • Methode

Methode 1

– Brute-Force-Rekursion: Bei der ersten Methode verwenden wir Brute-Force-Rekursion, um alle möglichen Teilsequenzen zu finden und zu prüfen, ob sie ausgeglichen sind. Wenn die Teilsequenz ausgeglichen ist, entfernen wir ein Klammerpaar und zählen die Anzahl der gelöschten Klammerpaare. Wir berechnen die Mindestanzahl von Paarlöschungen, die erforderlich sind, um die Zeichenfolge zu leeren.

Methode 2

– Dynamische Programmierung: Die zweite Methode nutzt dynamische Programmierung, um die Lösung zu optimieren. Wir können eine 2D-DP-Tabelle verwenden, um die Mindestanzahl an Löschungen zu speichern, die für einen Teilstring vom Index „i“ bis „j“ erforderlich sind. Wir durchlaufen die Zeichenfolge und füllen die DP-Tabelle basierend auf den angegebenen Kriterien. Methode 1 Gewalttätige Rekursion

Code

In diesem Code prüfen wir alle möglichen Kombinationen von Teilsequenzen, was zu einer exponentiellen Zeitkomplexität führt. Bei größeren Eingaben ist diese Methode möglicherweise nicht effizient.

#include <iostream>
#include <string>
using namespace std;

int countRemovalsRecursion(const string &s, int index, int open) {
   if (index == s.size()) {
      return open;
   }

   if (s[index] == '(') {
      return countRemovalsRecursion(s, index + 1, open + 1);
   } else if (open > 0) {
      return countRemovalsRecursion(s, index + 1, open - 1);
   } else {
      return 1 + countRemovalsRecursion(s, index + 1, open);
   }
}

int main() {
   string s = "(()())(";
   cout << "Input string: " << s << endl;
   cout << "Minimum removals (Brute Force Recursion): " << countRemovalsRecursion(s, 0, 0) << endl;
   return 0;
}
Nach dem Login kopieren

Ausgabe

Input string: (()())(
Minimum removals (Brute Force Recursion): 1
Nach dem Login kopieren

Methode 2

Beispiel

Diese dynamische Programmierlösung berechnet die Mindestanzahl an Löschungen, die erforderlich sind, um alle ausgeglichenen Klammerteilsequenzen zu leeren. Es durchläuft die Zeichenfolge, aktualisiert eine eindimensionale DP-Tabelle mit der Anzahl der linken Klammern und gibt den endgültigen DP-Wert als minimal zu entfernenden Betrag zurück.

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int countRemovalsDP(const string &s) {
   int n = s.size();
   vector<int> dp(n + 1, 0);

   for (int i = 0; i < n; ++i) {
      if (s[i] == '(') {
         dp[i + 1] = dp[i] + 1;
      } else {
         dp[i + 1] = max(dp[i] - 1, 0);
      }
   }
   return dp[n];
}

int main() {
   string s = "(()())()";
   cout << "Input string: " << s << endl;
   cout << "Minimum removals (Dynamic Programming): " << countRemovalsDP(s) << endl;
   return 0;
}
Nach dem Login kopieren

Ausgabe

Input string: (()())()
Minimum removals (Dynamic Programming): 0
Nach dem Login kopieren

Fazit

Grundlegende Konzepte der C-Sprache, z. B. was der Unterschied zwischen Zeichen- und Zeichenfolgendatentypen ist, Zeichenfolgentrennzeichen, Initialisierung von Zeichenfolgen und Arrays, Berechnung der Position, an der das erste Zeichen des Arrays Index 0 ist und das letzte Zeichen verwendet wird im Programm Muss leer sein, um eine korrekte Ausgabe zu erhalten.

Das Entfernen von Klammern in Programmen wird durch die Implementierung grundlegender, einfacher Konzepte der C-Programmierung erreicht.

Das obige ist der detaillierte Inhalt vonBerechnen Sie die Anzahl der Paare, die entfernt werden müssen, damit alle Teilsequenzen mit ausgeglichenen Klammern leer sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken Apr 04, 2025 am 11:18 AM

C Sprachdatenstruktur: Die Datenrepräsentation des Baumes und des Diagramms ist eine hierarchische Datenstruktur, die aus Knoten besteht. Jeder Knoten enthält ein Datenelement und einen Zeiger auf seine untergeordneten Knoten. Der binäre Baum ist eine besondere Art von Baum. Jeder Knoten hat höchstens zwei Kinderknoten. Die Daten repräsentieren structTreenode {intdata; structTreenode*links; structTreenode*rechts;}; Die Operation erstellt einen Baumtraversalbaum (Vorbereitung, in Ordnung und späterer Reihenfolge) Suchbauminsertion-Knoten Lösches Knotendiagramm ist eine Sammlung von Datenstrukturen, wobei Elemente Scheitelpunkte sind, und sie können durch Kanten mit richtigen oder ungerechten Daten miteinander verbunden werden, die Nachbarn darstellen.

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

In diesem Artikel werden die C -Standard -Vorlagenbibliothek (STL) erläutert, die sich auf seine Kernkomponenten konzentriert: Container, Iteratoren, Algorithmen und Funktoren. Es wird beschrieben, wie diese interagieren, um die generische Programmierung, die Verbesserung der Codeeffizienz und die Lesbarkeit t zu ermöglichen

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Dieser Artikel beschreibt die effiziente Verwendung von STL -Algorithmus in c. Es betont die Auswahl der Datenstruktur (Vektoren vs. Listen), Algorithmus -Komplexitätsanalyse (z. B. std :: sortieren vs. std :: partial_sort), Iteratoranwendungen und parallele Ausführung. Häufige Fallstricke wie

Wie gehe ich effektiv mit Ausnahmen in C um? Wie gehe ich effektiv mit Ausnahmen in C um? Mar 12, 2025 pm 04:56 PM

In diesem Artikel wird die effektive Ausnahmebehandlung in C, Covering Try, Catch und Wurp Mechanics, beschrieben. Es betont Best Practices wie Raii, die Vermeidung unnötiger Fangblöcke und die Protokollierung von Ausnahmen für robusten Code. Der Artikel befasst sich auch mit Perf

Die Wahrheit hinter dem Problem der C -Sprachdatei Die Wahrheit hinter dem Problem der C -Sprachdatei Apr 04, 2025 am 11:24 AM

Die Wahrheit über Probleme mit der Dateibetrieb: Dateiöffnung fehlgeschlagen: unzureichende Berechtigungen, falsche Pfade und Datei besetzt. Das Schreiben von Daten fehlgeschlagen: Der Puffer ist voll, die Datei ist nicht beschreibbar und der Speicherplatz ist nicht ausreichend. Andere FAQs: Langsame Dateitraversal, falsche Textdateicodierung und Binärdatei -Leser -Fehler.

Wie verwende ich RValue -Referenzen effektiv in C? Wie verwende ich RValue -Referenzen effektiv in C? Mar 18, 2025 pm 03:29 PM

Artikel erörtert den effektiven Einsatz von RValue -Referenzen in C für Bewegungssemantik, perfekte Weiterleitung und Ressourcenmanagement, wobei Best Practices und Leistungsverbesserungen hervorgehoben werden. (159 Charaktere)

Wie verwende ich Bereiche in C 20 für ausdrucksstärkere Datenmanipulationen? Wie verwende ich Bereiche in C 20 für ausdrucksstärkere Datenmanipulationen? Mar 17, 2025 pm 12:58 PM

C 20 -Bereiche verbessern die Datenmanipulation mit Ausdruckskraft, Komposition und Effizienz. Sie vereinfachen komplexe Transformationen und integrieren sich in vorhandene Codebasen, um eine bessere Leistung und Wartbarkeit zu erhalten.

Wie verwende ich die Semantik in C, um die Leistung zu verbessern? Wie verwende ich die Semantik in C, um die Leistung zu verbessern? Mar 18, 2025 pm 03:27 PM

In dem Artikel wird die Verwendung von Move Semantics in C erörtert, um die Leistung zu verbessern, indem unnötiges Kopieren vermieden wird. Es umfasst die Implementierung von Bewegungskonstruktoren und Zuordnungsbetreibern unter Verwendung von STD :: MOVE

See all articles