Heim > Artikel > Backend-Entwicklung > Überprüft, ob eine Zeichenfolge durch Umkehren einer Teilzeichenfolge lexikographisch kleiner gemacht werden kann
In C++ haben wir eine integrierte Funktion reverse() zum Umkehren eines Teilstrings, um zu prüfen, ob ein String lexikografisch kleiner werden kann. Bei der Wörterbuchreihenfolge werden die Zeichen eines Wortes in der Wörterbuchreihenfolge sortiert.
Nehmen wir ein String-Beispiel, um zu überprüfen, ob die lexikografische Reihenfolge kleiner ist.
Wir vergleichen diese beiden Wörter, um nach dem lexikografisch kleineren Wort zu suchen und nehmen zwei Zeichenfolgen, nämlich 'apple' und 'army'. Der erste Buchstabe beider Zeichenfolgen beginnt mit dem Buchstaben ‘a’. Wenn wir das zweite Zeichen der beiden Buchstaben untersuchen, steht alphabetisch gesehen ‘p‘ vor ‘r‘. Daher ist apple lexikografisch gesehen kleiner als army.
In der Zeichenfolge "tutorialspoint" ergibt die Umkehrung der Teilzeichenfolge "oria" "airo", was lexikografisch kleiner ist. Schreiben Sie dann die letzte Zeichenfolge als "tutairolspoint".
Invertieren Sie in der Zeichenfolge "tutorix" die Teilzeichenfolge "tori", um "irot" zu erhalten, da das Startzeichen der ersten Teilzeichenfolge 't' und das zweite Zeichen ist Die Teilzeichenfolge ist ' i', also kommt 'i' vor 't' im Alphabet, also ist 'irot' lexikographisch kleiner als 'tori'. Abschließendes String-Schreiben "tuirotx"
Wir nehmen ein weiteres String-Beispiel, wie zum Beispiel "acwz".
reverse( str_name.begin(), str_name.end() )
Anleitung
Die Umkehrfunktion ist Teil der C++-Standardbibliothek. Sie akzeptiert zwei Parameter „str_name.begin()“ und „str_name.end()“.
str_name ist ein vom Benutzer vorgeschlagener Zeichenfolgenname.
begin() und end() sind vordefinierte integrierte Funktionen, die unter der Umkehrfunktion verwendet werden. Die Aufgabe der begin-Funktion besteht darin, einen Iterator zurückzugeben, der auf das erste Zeichen der Eingabezeichenfolge zeigt. Die Endfunktion gibt einen Iterator zurück, der auf eine Position vor dem letzten Zeichen der Eingabezeichenfolge zeigt.
Bitte beachten Sie, dass die Umkehrfunktion nichts zurückgibt, da sie den Container (str_name) direkt ändert.
Zunächst verwenden wir die drei notwendigen Header-Dateien, nämlich iostream, string und include
Wir beginnen mit der Hauptfunktion, in der wir eine String-Variable namens ‘str‘ deklarieren und den String ‘tutorialspoint‘ darin speichern. Anschließend deklarieren wir die boolesche Variable ‘isReverse‘ als ‘false‘, um anzugeben, dass die angegebene Zeichenfolge nicht umgekehrt wurde und immer noch in ihrer ursprünglichen Form vorliegt.
Wir erstellen dann zwei verschachtelte for-Schleifen, um jeden möglichen Teilstring von ‘str’ zu überprüfen. Die Teilzeichenfolge wird dann in einer temporären Zeichenfolge mit dem Namen ‘temp‘ gespeichert.
Danach rufen wir die Funktion 'reverse()' auf, um den Teilstring 'j' umzukehren, der in der Variablen 'temp' zwischen den Indizes 'i' und gespeichert ist.
Erstellen Sie später eine if-Anweisung, um zu prüfen, ob die umgekehrte Zeichenfolge lexikographisch kleiner ist als die Variablen ‘temp’ und ‘str’ zum Vergleich.
Der Compiler vergleicht die Variablen temp und str. Wenn beide gleich sind, wird die Variable ‘isReverse‘ auf true gesetzt und die if-Anweisung wird unterbrochen.
Jetzt überprüfen wir den Wert von isReverse und wenn er wahr ist, drucken wir die if-Bedingungsanweisung aus, andernfalls drucken wir die else-Bedingungsanweisung.
Beenden Sie das Programm.
In diesem Programm lernen wir, wie man einen String lexikografisch kleiner macht, indem man einen beliebigen Teilstring umkehrt.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string str = "tutorialspoint"; // User can change this to test other strings such as acwz, groffer, etc bool isReverse = false; // it is used to indicate whether or not a substring has been found in the original string “str”. // use the loop through all possible substrings of str for (int i = 0; i < str.length(); i++) { for (int j = i+1; j < str.length(); j++) { string temp = str; // create new temporary variable to store the value of str. // reverse the substring of i and j reverse ( temp.begin() + i, temp.begin() + j + 1 ); // reverse function follow the header file name as <algorithm> if (temp < str) { // Check whether the reversed string is lexicographically smaller isReverse = true; break; } } } if ( isReverse ) { cout << "Yes, this is lexicographically smaller by reversing a substring." << endl; } else { cout << "No, this is not lexicographically smaller by reversing a substring." << endl; } return 0; }
Wenn wir den Wert „tutorialspoint“ eingeben, erhalten wir folgendes Ergebnis -
Yes, this is lexicographically smaller by reversing a substring.
Wenn wir den Wert „acwz“ eingeben, erhalten wir folgendes Ergebnis:
No, this is not lexicographically smaller by reversing a substring.
Wir haben gesehen, wie man String-Variablen verwendet, um den kleineren Wert in einem Wörterbuch zu berechnen, indem man einen beliebigen Teilstring umkehrt. Dann setzen wir die String-Variable auf eine temporäre Variable. Anschließend verwenden wir die vordefinierte Funktion „reverse()“, um die Wörterbuchwörter in ihrer umgekehrten Form zu berechnen. Als nächstes suchen wir nach der lexikographisch kleineren, indem wir die Variablen temp und str vergleichen und erhalten das Ergebnis.
Das obige ist der detaillierte Inhalt vonÜberprüft, ob eine Zeichenfolge durch Umkehren einer Teilzeichenfolge lexikographisch kleiner gemacht werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!