Heim >Backend-Entwicklung >C++ >Ändern Sie die Zeichenfolge, indem Sie Zeichen einfügen, sodass jede Teilzeichenfolge der Länge K nur eindeutige Zeichen enthält
Bei der Verarbeitung von Zeichenfolgen besteht eine häufige Aufgabe darin, sicherzustellen, dass die Zeichenfolge bestimmte Bedingungen erfüllt. Eine der Bedingungen könnte darin bestehen, sicherzustellen, dass jede Teilzeichenfolge der Länge K in der Zeichenfolge nur eindeutige Zeichen enthält. Dies ist eine häufige Anforderung bei Problemen im Zusammenhang mit Datenkodierung, Zeichenfolgenmanipulation und Kryptografie.
Das Problem, das wir zu lösen versuchen, kann wie folgt beschrieben werden -
Ändern Sie bei einer gegebenen Zeichenfolge str und einer Ganzzahl K die Zeichenfolge, indem Sie Zeichen einfügen, sodass jede Teilzeichenfolge der Länge K in der Zeichenfolge nur eindeutige Zeichen enthält.
Wir können dieses Problem lösen, indem wir die Schiebefenstertechnik verwenden, eine Methode zur effizienten Überprüfung der Eigenschaften aufeinanderfolgender Subarrays oder Teilstrings in einem größeren Array oder String.
Lassen Sie uns die Schritte dieses Algorithmus im Detail erklären -
Initialisieren Sie eine leere unordered_map (Hashmap), um die Häufigkeit von Zeichen im aktuellen Teilstring zu verfolgen.
Durchlaufen Sie die Zeichen in der Zeichenfolge mithilfe eines Schiebefensters der Größe K.
Wenn sich ein Zeichen bereits in der Hashmap befindet, fügen Sie ein neues Zeichen ein, bis ein eindeutiges Zeichen erhalten wird oder die Größe des Schiebefensters K beträgt.
Bewegen Sie das Schiebefenster um ein Zeichen und wiederholen Sie den Vorgang, bis Sie das Ende der Zeichenfolge erreicht haben.
Die zeitliche Komplexität dieses Algorithmus beträgt O(n), wobei n die Länge der Zeichenfolge ist. Dies liegt daran, dass wir jedes Zeichen in der Zeichenfolge nur einmal durchlaufen.
Die chinesische Übersetzung vonSchauen wir uns den C++-Code an, der den obigen Algorithmus implementiert -
#include<bits/stdc++.h> using namespace std; string modifyString(string str, int K) { int n = str.size(); string result = ""; for(int i = 0; i < n; i++) { unordered_map<char, int> freq; int j = i; while(j < n && j < i + K) { while(j < n && freq[str[j]]) { result += 'a' + (rand() % 26); // insert a random character } freq[str[j++]]++; result += str[j]; } i = j - 1; } return result; } int main() { string str = "abcabc"; int K = 3; cout << modifyString(str, K) << endl; return 0; }
bcabc
Dieser Code fügt zufällig einen englischen Kleinbuchstaben ein, wenn er auf wiederholte Zeichen stößt.
Nehmen wir ein Beispiel, um dieses Problem besser zu verstehen.
Betrachten Sie die Zeichenfolge str = „abcabc“ und K = 3.
Nachdem Sie den Code ausgeführt haben, erhalten Sie möglicherweise ähnliche Ergebnisse wie abcxyzabc. Die aus drei Zeichen bestehenden Teilzeichenfolgen sind abc, bcx, cxy, xyz, yza, zab, abc, die alle eindeutige Zeichen enthalten.
HINWEIS− Die Ergebnisse können variieren, da wir zufällige Zeichen einfügen.
Zusammenfassend bietet dieser Algorithmus eine Möglichkeit, eine Zeichenfolge zu ändern, um sicherzustellen, dass jede Teilzeichenfolge der Länge K eindeutige Zeichen enthält. Dies ist eine effiziente Lösung, die die Leistungsfähigkeit der Schiebefenstertechnologie und die Flexibilität von C++ nutzt. Wir empfehlen Ihnen, mit verschiedenen Saiten und K-Werten zu experimentieren, um dieses Konzept vollständig zu verstehen.
Das obige ist der detaillierte Inhalt vonÄndern Sie die Zeichenfolge, indem Sie Zeichen einfügen, sodass jede Teilzeichenfolge der Länge K nur eindeutige Zeichen enthält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!