Heim >Backend-Entwicklung >C++ >verschlüsselte Zeichenfolge

verschlüsselte Zeichenfolge

王林
王林nach vorne
2023-09-08 10:37:021179Durchsuche

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.

Beispiel

Input 1: string str = "aabbbcccc"
Output: "4c3b2a"

Anleitung

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"

Anleitung

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.

Methode

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.

Beispiel

#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;
}

Ausgabe

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.

Fazit

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen