Heim >Backend-Entwicklung >C++ >verschlüsselte Zeichenfolge
Verschlüsselung ist eine Technik, die Daten durch den Einsatz bestimmter Techniken oder bestimmter Schritte in eine andere Art von Informationen umwandelt oder aus denen die vorherigen Informationen nicht direkt erfasst werden können. Für die Verschlüsselung müssen wir bestimmte Schritte befolgen, die für den jeweiligen Verschlüsselungstyp festgelegt sind.
In dieser Frage erhalten wir eine Zeichenfolge und müssen diese verschlüsseln, indem wir die angegebenen Schritte befolgen -
Zuerst müssen wir alle Teilzeichenfolgen abrufen, die dieselben Zeichen enthalten, und diese Teilzeichenfolge durch ein einzelnes Zeichen ersetzen, gefolgt von der Länge der Teilzeichenfolge.
Ändern Sie nun die Länge in einen Hexadezimalwert und alle Zeichen des Hexadezimalwerts müssen in Kleinbuchstaben geändert werden.
Zum Schluss kehren Sie die gesamte Zeichenfolge um.
Input 1: string str = "aabbbcccc"
Output: "4c3b2a"
Zuerst erhalten wir alle Teilzeichenfolgen, die die gleiche Anzahl an Zeichen enthalten, und ersetzen sie durch die Häufigkeit der Zeichen, wodurch wir die Zeichenfolge „a2b3c4“ erhalten. Jetzt ändern wir die Länge in einen Hexadezimalwert, aber 2, 3 und 4 haben den gleichen Wert in Hexadezimalform. Schließlich kehren wir die Zeichenfolge um und das Endergebnis ist 4c3b2a.
Input2: string str = "oooooooooooo"
Output: "co"
Zuerst wandeln wir die Zeichenfolge in die Frequenzzeichenfolge „o12“ um. Nun ist der Hexadezimalwert von 12 C, wir ändern ihn in Kleinbuchstaben, d. h. c, ersetzen ihn in der Zeichenfolge und kehren die Zeichenfolge dann um.
Anhand des obigen Beispiels haben wir eine Vorstellung von dem Problem. Kommen wir nun zum Implementierungsteil -
In der Implementierung implementieren wir zunächst eine Funktion, die Eingaben als Ganzzahl entgegennimmt und einen String als Rückgabewert zurückgibt.
Diese Funktion wird verwendet, um die angegebene Ganzzahl mit einer Modifikation in einen Hexadezimalwert umzuwandeln, d. h. mit englischen Kleinbuchstaben anstelle von englischen Großbuchstaben.
Wir werden eine weitere Funktion definieren, in der wir die Zeichenfolge mithilfe einer for-Schleife durchlaufen und dann für die Teilzeichenfolge desselben Zeichens eine while-Schleife verwenden, bis wir ein Zeichen finden, das dem aktuellen Zeichen entspricht.
Wir berechnen die Häufigkeit, wandeln sie in einen Hexadezimalwert um und fügen ihn mit dem aktuellen Indexzeichen zur Zeichenfolge hinzu.
Schließlich kehren wir die Zeichenfolge um und geben sie zum Drucken an die Hauptfunktion zurück.
#include <bits/stdc++.h> using namespace std; // function to convert the integer to hexadecimal values string convertToHexa(int val){ string res = ""; // string to store the result while(val != 0){ int cur = val %16; // getting the mode of the current value if(cur < 10){ res += '0' + cur; } else{ res += 87 + cur; // adding 87 to get the lowercase letters } val /= 16; // updating the current value } return res; } // function to encrypt the string string encrypt(string str){ int len = str.length(); // getting the length of the string int freq = 0; // variable to store the frequency string ans = ""; // string to store the answer // traversing over the string for(int i=0; i<len; i++){ int j = i; // variable to keep track the substring with the same character while(j < len && str[j] == str[i]){ j++; } freq = j-i; ans += str[i]; // calling the function to get the hexadecimal value string hexaValue = convertToHexa(freq); ans += hexaValue; i = j-1; } // reversing the string reverse(ans.begin(), ans.end()); return ans; } // main function int main(){ string str = "aaabbbbccccccccccc"; // given string // calling the function to get the encrypted string cout<<"The given string after the encryption is: "<<encrypt(str)<<endl; return 0; }
The given string after the encryption is: bc4b3a
Zeitliche und räumliche Komplexität
Die zeitliche Komplexität des obigen Codes beträgt O(N), wobei N die Größe der angegebenen Zeichenfolge ist. Wir brauchten N Zeit, um über die Zeichenfolge zu iterieren, während das Umkehren der Zeichenfolge weniger als N Zeit in Anspruch nahm.
Die Speicherplatzkomplexität des obigen Codes zum Speichern der endgültigen Zeichenfolge beträgt O(N). Wenn wir dies ignorieren, wird kein zusätzlicher Speicherplatz verwendet.
Achtung
Die Verschlüsselung kann auf unendlich viele Arten erfolgen und es geht lediglich darum, die Regeln für die Verschlüsselung der Schlüssel zu definieren. Das Hauptmerkmal der Verschlüsselung besteht darin, dass sie bei jeder Eingabe dasselbe Ergebnis liefern muss.
In diesem Tutorial haben wir einen Code implementiert, der eine bestimmte Zeichenfolge basierend auf Regeln verschlüsselt. Zuerst müssen wir Teilzeichenfolgen abrufen, die Elemente desselben Typs enthalten, und diese durch Zeichen und deren Häufigkeiten ersetzen. Als nächstes ändern wir die Frequenz in eine Hexadezimalzahl und kehren schließlich die gesamte Zeichenfolge um. Die zeitliche Komplexität des obigen Codes beträgt O(N).
Das obige ist der detaillierte Inhalt vonverschlüsselte Zeichenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!