


C++-Programm: Finden Sie die längste Teilfolge von Zahlen mit der gleichen Links- und Rechtsdrehung
In diesem Problem müssen wir die maximale Länge der Teilsequenz bei gleicher Links- und Rechtsdrehung ermitteln. Linksdrehung bedeutet, dass alle Zeichen in der Zeichenfolge nach links verschoben werden und das erste Zeichen am Ende verschoben wird. Rechtsdrehung bedeutet, dass alle Zeichen der Zeichenfolge nach rechts und das letzte Zeichen an den Anfang verschoben werden.
Problemstellung – Wir erhalten eine Zeichenfolge str mit Zahlen und müssen eine Teilfolge maximaler Länge mit derselben Links- und Rechtsdrehung finden.
Beispiel
Geben Sie -str="323232",
einAusgabe– 6
Erklärung – Die längste Teilsequenz mit der gleichen Links- und Rechtsdrehung ist „323232“. Drehen Sie es nach links auf „232323“ und nach rechts auf „232323“.
Geben Sie -str = ‚00010100‘
einAusgabe– 6
Erklärung – Die längste Teilsequenz mit gleicher Links- und Rechtsdrehung ist „000000“.
Geben Sie -str = ‘092312110431010’
einAusgabe– 6
Erklärung – Es gibt 2 mögliche Teilfolgen der Länge 6 mit gleicher Links- und Rechtsdrehung. Die erste ist „010101“ und die zweite ist „101010“.
Methode 1
In dieser Methode finden wir alle möglichen Teilfolgen der angegebenen Zeichenfolge. Danach prüfen wir, ob die Links- und Rechtsdrehung der Saite gleich ist. Wir werden eine rekursive Methode verwenden, um alle möglichen Teilfolgen zu finden.
Algorithmus
Initialisieren Sie die globale Variable „maxLen“ auf Null, um die Länge der längsten Teilsequenz mit der gleichen Links- und Rechtsdrehung zu speichern.
Definieren Sie die Funktion isRightSameLeft(), um zu prüfen, ob die Links- und Rechtsdrehungen der Zeichenfolge gleich sind.
Verwenden Sie innerhalb der Funktion die Methode substr(), um die Zeichenfolge nach links und rechts zu drehen.
getAllSubSeq() wird verwendet, um alle möglichen Teilsequenzen einer bestimmten Zeichenfolge zu finden.
Basisfall definieren. Wenn str leer ist, erhalten wir die Teilsequenz und führen die Funktion isRightSameLeft() aus, um zu prüfen, ob die Teilsequenz die gleiche Links- und Rechtsdrehung aufweist. Wenn ja, aktualisieren Sie den Wert der Variablen „maxLen“, wenn ihre Länge größer als der aktuelle Wert von „maxLen“ ist.
Führen Sie einen rekursiven Aufruf durch, nachdem Sie das erste Zeichen aus „str“ entfernt und die Zeichenfolge „out“ angehängt haben.
Nachdem Sie das erste Zeichen entfernt und die Zeichenfolge „out“ unverändert gelassen haben, führen Sie einen weiteren rekursiven Funktionsaufruf durch. Bei diesem rekursiven Aufruf schließen wir das erste Zeichen von „str“ aus.
Beispiel
#include <iostream> #include <string> using namespace std; // Defining global variable to store the length of the longest subsequence according to the given condition int maxLen = 0; // function to check if the string is the same after the left rotation bool isRightSameLeft(string str) { int len = str.length(); return str.substr(1, len - 1) + str[0] == str[len - 1] + str.substr(0, len - 1); } // function to get all subsequences of a string void getAllSubSeqs(string str, string out) { // If the string is empty, we get the subsequences. Check if its left and right rotation is the same if (str.empty()) { if (isRightSameLeft(out)) maxLen = max(maxLen, (int)out.length()); return; } // Recursive case remove the first character from str, and add it to the output getAllSubSeqs(str.substr(1), out + str[0]); // remove the first character from str, and drop it if (str.length() > 1) getAllSubSeqs(str.substr(1), out); } int main() { string str = "323232"; string out = ""; getAllSubSeqs(str, out); cout << "The longest subsequence of str having same left and right rotation is " << maxLen; return 0; }
Ausgabe
The longest subsequence of str having same left and right rotation is 6
Zeitkomplexität – O(N*2N). Hier O(N) zum Vergleichen von Links- und Rechtsdrehungen und O(2N) zum Finden aller möglichen Teilfolgen.
Raumkomplexität – O(1), da wir keinen zusätzlichen Raum verbrauchen.
Methode 2
Hier haben wir die obige Methode optimiert. Wir können die Lösung der Beispieleingabe beobachten. Links- und Rechtsdrehungen einer Teilsequenz sind nur dann gleich, wenn die Teilsequenz dasselbe Zeichen oder abwechselnd zwei verschiedene Zeichen enthält und eine gleichmäßige Länge hat.
Algorithmus
Verwenden Sie zwei verschachtelte Schleifen, um zwei beliebige Zahlen zu kombinieren.
Definieren Sie die Variable „cnt“, um die Länge einer Teilsequenz zu ermitteln, die abwechselnd zwei Zahlen enthält, und initialisieren Sie sie auf Null.
Definieren Sie eine boolesche „erste“ Variable, um zu verfolgen, ob das nächste Zeichen das i-te oder j-te Zeichen sein soll.
Verwenden Sie eine Schleife, um die Zeichenfolge zu durchlaufen.
Wenn first == true und str[k] - '0' == I, wechseln Sie den Wert von 'first' ab und erhöhen Sie 'cnt' um 1.
Wenn first == false und str[k] - '0' == j, wechseln Sie den Wert von 'first' erneut und erhöhen Sie 'cnt' um 1.
Wenn i und j nicht gleich sind und der „cnt“-Wert ungerade ist, dekrementieren Sie ihn um 1.
Wenn der cnt-Wert größer als „res“ ist, aktualisieren Sie den Wert der Variablen „res“.
Beispiel
#include <bits/stdc++.h> using namespace std; int getLongSubSeq(string str) { // Store the length of the string int len = str.size(), res = 0; // Traverse the all possible combination of two digits for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { // to store the length of an alternating sequence of the current combination int cnt = 0; // to track the turn of the ith or jth digit bool first = true; // traverse the string for (int k = 0; k < len; k++) { // If the current digit is equal to I, and the first is true, increment the count if (first == true and str[k] - '0' == i) { first = false; cnt++; } else if (first == false and str[k] - '0' == j) { // If the current digit is equal to j, and the first is false, increment the count first = true; cnt++; } } // If the sequence is odd and i and j are different, decrement the count if (i != j and cnt % 2 == 1) cnt--; // Update the answer res = max(cnt, res); } } return res; } int main() { string str = "00010100"; cout << "The longest subsequence of str having same left and right rotation is " << getLongSubSeq(str); return 0; }
Ausgabe
The longest subsequence of str having same left and right rotation is 6
Zeitkomplexität – O(10*10*N), weil wir Teilfolgen aus Zeichenfolgen finden, die Zahlenkombinationen enthalten.
Raumkomplexität – O(1), da wir keinen dynamischen Raum verwenden.
Dieses Tutorial zeigt uns zwei Methoden, um die längste Teilsequenz zu finden, die die gleiche Links- und Rechtsdrehung enthält. Die erste Methode ist die einfache Methode, die sehr zeitaufwändig ist und wir sie nicht für große Eingaben verwenden können.
Die zweite Methode ist optimiert und ihre zeitliche Komplexität entspricht nahezu O(N).
Das obige ist der detaillierte Inhalt vonC++-Programm: Finden Sie die längste Teilfolge von Zahlen mit der gleichen Links- und Rechtsdrehung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Als Lifestyle-Sharing-Plattform ist Xiaohongshu der Ort, an dem immer mehr Nutzer ihre eigenen Videoinhalte veröffentlichen und ihr tägliches Leben mit anderen Nutzern teilen. Viele Benutzer stoßen beim Posten von Videos möglicherweise auf ein Problem: Wie kann man die Zeit überprüfen, zu der sie oder andere Videos gepostet haben? 1. Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? 1. Überprüfen Sie den Zeitpunkt, zu dem Sie das Video gepostet haben. Um den Zeitpunkt zu überprüfen, zu dem Sie das Video gepostet haben, müssen Sie zunächst die Xiaohongshu-App öffnen und sich bei Ihrem persönlichen Konto anmelden. Unten auf der Benutzeroberfläche der persönlichen Homepage gibt es eine Option mit der Bezeichnung „Erstellung“. Nachdem Sie zum Betreten geklickt haben, wird eine Spalte mit dem Namen „Video“ angezeigt. Hier können Sie eine Liste aller veröffentlichten Videos durchsuchen und einfach überprüfen, wann sie veröffentlicht wurden. Nach dem Klicken befindet sich in der oberen rechten Ecke jedes Videos die Schaltfläche „Details anzeigen“.

Standby ist ein Sperrbildschirmmodus, der aktiviert wird, wenn das iPhone an das Ladegerät angeschlossen und horizontal (oder im Querformat) ausgerichtet ist. Es besteht aus drei verschiedenen Bildschirmen, von denen einer im Vollbildmodus angezeigt wird. Lesen Sie weiter, um zu erfahren, wie Sie den Stil Ihrer Uhr ändern können. Auf dem dritten Bildschirm von StandBy werden Uhrzeiten und Daten in verschiedenen Themen angezeigt, die Sie vertikal wischen können. Einige Themes zeigen auch zusätzliche Informationen an, wie z. B. Temperatur oder nächster Alarm. Wenn Sie eine beliebige Uhr gedrückt halten, können Sie zwischen verschiedenen Themen wechseln, darunter Digital, Analog, Welt, Solar und Floating. Float zeigt die Zeit in großen Blasenzahlen in anpassbaren Farben an, Solar verfügt über eine Standardschriftart mit einem Sonneneruptionsdesign in verschiedenen Farben und World zeigt die Welt durch Hervorhebung an

Die Unfähigkeit des Laptops, die Zahlen 1-9 einzugeben, wird durch ein Einstellungsproblem verursacht. Die Lösung ist: 1. Drücken Sie „win+r“, um den Befehl „run“ zu öffnen, geben Sie cmd ein und drücken Sie die Eingabetaste osk und drücken Sie die Eingabetaste. 3. Klicken Sie auf der virtuellen Tastatur auf „Optionen“ und aktivieren Sie „Ziffernblock aktivieren“.

Die Möglichkeit, Zufallszahlen oder alphanumerische Zeichenfolgen zu generieren, ist in vielen Situationen praktisch. Sie können damit an verschiedenen Orten im Spiel Feinde oder Nahrung hervorbringen. Sie können es auch verwenden, um Benutzern zufällige Passwörter vorzuschlagen oder Dateinamen zum Speichern von Dateien zu erstellen. Ich habe ein Tutorial darüber geschrieben, wie man in PHP zufällige alphanumerische Zeichenfolgen generiert. Ich habe am Anfang dieses Beitrags gesagt, dass nur wenige Ereignisse wirklich zufällig sind, und das Gleiche gilt für die Zufallszahlen- oder String-Generierung. In diesem Tutorial zeige ich Ihnen, wie Sie in JavaScript eine pseudozufällige alphanumerische Zeichenfolge generieren. Generieren von Zufallszahlen in JavaScript Beginnen wir mit der Generierung von Zufallszahlen. Die erste Methode, die mir in den Sinn kommt, ist Math.random(), die einen Float zurückgibt

Zahlen als Ausgabe darzustellen ist eine interessante und wichtige Aufgabe beim Schreiben eines Programms in einer beliebigen Sprache. Bei ganzzahligen Typen (Daten vom Typ kurz, lang oder mittel) ist es einfach, Zahlen als Ausgabe darzustellen. Bei Gleitkommazahlen (Float- oder Double-Typ) müssen wir sie manchmal auf eine bestimmte Anzahl von Dezimalstellen runden. Wenn wir beispielsweise 52,24568 mit drei Dezimalstellen darstellen möchten, ist eine gewisse Vorverarbeitung erforderlich. In diesem Artikel stellen wir verschiedene Techniken vor, um Gleitkommazahlen durch Runden auf eine bestimmte Anzahl von Dezimalstellen darzustellen. Unter den verschiedenen Ansätzen ist es wichtig, eine C-ähnliche Formatzeichenfolge zu verwenden, das Präzisionsargument zu verwenden und die Funktion „round()“ aus der Mathematikbibliothek zu verwenden. Schauen wir sie uns einzeln an. mit

Wir alle kennen Zahlen, die nicht das Quadrat einer Zahl sind, wie zum Beispiel 2, 3, 5, 7, 8 usw. Es gibt N nichtquadratische Zahlen und es ist unmöglich, jede Zahl zu kennen. In diesem Artikel erklären wir alles über quadratlose oder nichtquadratische Zahlen und Möglichkeiten, die N-te nichtquadratische Zahl in C++ zu finden. N-te nichtquadratische Zahl Wenn eine Zahl das Quadrat einer ganzen Zahl ist, wird die Zahl als perfektes Quadrat bezeichnet. Einige Beispiele für perfekte Quadratzahlen sind -1isquadratvon14isquadratvon29isquadratvon316isquadratvon425isquadratvon5. Wenn eine Zahl nicht das Quadrat einer ganzen Zahl ist, wird die Zahl als nichtquadratisch bezeichnet. Die ersten 15 nichtquadratischen Zahlen sind beispielsweise -2,3,5,6,

In der Programmiersprache PHP ist die Funktion is_numeric() eine sehr häufig verwendete Funktion, mit der ermittelt wird, ob eine Variable oder ein Wert eine Zahl ist. Bei der tatsächlichen Programmierung ist es häufig erforderlich, den vom Benutzer eingegebenen Wert zu überprüfen, um festzustellen, ob es sich um einen numerischen Typ handelt. In diesem Fall kann die Funktion is_numeric() zur Bestimmung verwendet werden. 1. Einführung in die Funktion is_numeric() Die Funktion is_numeric() ist eine Funktion, die verwendet wird, um zu erkennen, ob eine Variable oder ein Wert eine Zahl ist. Gibt tru zurück, wenn die Variable oder der Wert eine Zahl ist

In diesem Artikel werden wir das Problem diskutieren, Zahlen zwischen 1 und n (vorgegeben) zu finden, die nicht durch eine Zahl zwischen 2 und 10 teilbar sind. Lassen Sie uns dies anhand einiger Beispiele verstehen: Eingabe: Nummer = 14 Ausgabe: 3 Erläuterung: Es gibt drei Zahlen, 1, 11 und 13, die nicht teilbar sind. Eingabe: Nummer = 21 Ausgabe: 5 Erläuterung: Es gibt fünf Zahlen 1, 11, 13, 17 und 19, die nicht teilbar sind
