Inhaltsverzeichnis
Beispiel
Methode 2
Algorithmus
Ausgabe
Heim Backend-Entwicklung C++ C++-Programm: Finden Sie die längste Teilfolge von Zahlen mit der gleichen Links- und Rechtsdrehung

C++-Programm: Finden Sie die längste Teilfolge von Zahlen mit der gleichen Links- und Rechtsdrehung

Aug 30, 2023 pm 01:33 PM
数字 最长 旋转子序列

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",

ein

Ausgabe– 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‘

ein

Ausgabe– 6

Erklärung – Die längste Teilsequenz mit gleicher Links- und Rechtsdrehung ist „000000“.

Geben Sie -str = ‘092312110431010’

ein

Ausgabe– 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.

    Die Funktion
  • 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;
}
Nach dem Login kopieren

Ausgabe

The longest subsequence of str having same left and right rotation is 6
Nach dem Login kopieren
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe

The longest subsequence of str having same left and right rotation is 6
Nach dem Login kopieren
Nach dem Login kopieren

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!

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ß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)

Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? Wie lange dauert es am längsten, ein Video zu veröffentlichen? Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? Wie lange dauert es am längsten, ein Video zu veröffentlichen? Mar 21, 2024 pm 04:26 PM

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“.

iOS 17: So ändern Sie den Uhrstil des iPhone im Standby-Modus iOS 17: So ändern Sie den Uhrstil des iPhone im Standby-Modus Sep 10, 2023 pm 09:21 PM

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

Was soll ich tun, wenn mein Laptop die Zahlen 1-9 nicht eingeben kann? Was soll ich tun, wenn mein Laptop die Zahlen 1-9 nicht eingeben kann? Feb 23, 2023 pm 05:19 PM

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“.

Generieren Sie Zufallszahlen und Zeichenfolgen in JavaScript Generieren Sie Zufallszahlen und Zeichenfolgen in JavaScript Sep 02, 2023 am 08:57 AM

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

C++-Programm zum Runden einer Zahl auf n Dezimalstellen C++-Programm zum Runden einer Zahl auf n Dezimalstellen Sep 12, 2023 pm 05:13 PM

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

Verwenden Sie C++, um Code zu schreiben, um die N-te nichtquadratische Zahl zu finden Verwenden Sie C++, um Code zu schreiben, um die N-te nichtquadratische Zahl zu finden Aug 30, 2023 pm 10:41 PM

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,

Überprüfen Sie mit der Funktion is_numeric() in PHP, ob es sich um eine Zahl handelt Überprüfen Sie mit der Funktion is_numeric() in PHP, ob es sich um eine Zahl handelt Jun 27, 2023 pm 05:00 PM

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

Finden Sie mit C++ Zahlen, die durch keine Zahl in einem Bereich teilbar sind Finden Sie mit C++ Zahlen, die durch keine Zahl in einem Bereich teilbar sind Sep 13, 2023 pm 09:21 PM

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

See all articles