Heim >Backend-Entwicklung >C++ >Machen Sie alle Zeichen in der Zeichenfolge gleich, indem Sie den minimalen ASCII-Wert erhöhen oder verringern
Das ASCII-System (American Standard Code for Information Interchange) wird in der Programmierung häufig zur Manipulation von Zeichen verwendet. In diesem Artikel untersuchen wir ein interessantes Problem, bei dem wir alle Zeichen einer Zeichenfolge um die Mindestanzahl gleich machen müssen von Inkrementen oder Dekrementen von ASCII-Werten von Zeichen. Wir werden eine detaillierte Erklärung des Problems liefern, eine effiziente Lösung in C++ vorschlagen und seine Komplexität analysieren.
Bei einer Zeichenfolge, die aus englischen Kleinbuchstaben besteht, besteht unsere Aufgabe darin, alle Zeichen in der Zeichenfolge gleich zu machen, indem wir ihre ASCII-Werte ändern. Der Haken daran ist, dass wir dies mit der geringsten Anzahl von Änderungen tun müssen.
Wir können den ASCII-Wert eines Zeichens erhöhen oder verringern. Jede Erhöhung oder Verringerung zählt als eine Operation. Das Ziel besteht darin, die Mindestanzahl an Operationen zu ermitteln, die erforderlich sind, um alle Zeichen in einer Zeichenfolge gleich zu machen.
Um dieses Problem zu lösen, müssen wir das Zeichen finden, das am häufigsten in der Zeichenfolge vorkommt. Der Grund dafür ist, dass weniger Operationen erforderlich wären, um alle anderen Zeichen in dieses am häufigsten vorkommende Zeichen zu ändern.
Zuerst zählen wir die Häufigkeit jedes Zeichens in der Zeichenfolge. Dann finden wir die Zeichen mit der höchsten Häufigkeit. Die Anzahl der Operationen, die erforderlich sind, um alle Zeichen mit diesem Zeichen gleich zu machen, ist die Summe der Differenzen zwischen den ASCII-Werten der häufigsten Zeichen und den ASCII-Werten aller anderen Zeichen.
Das Folgende ist der C++-Code zur Lösung des Problems -
#include<bits/stdc++.h> using namespace std; int minOperations(string str) { int freq[26] = {0}; for (char c : str) { freq[c - 'a']++; } int max_freq = *max_element(freq, freq+26); int total_chars = str.length(); return total_chars - max_freq; } int main() { string str; cout << "Enter the string: "; cin >> str; cout << "Minimum operations: " << minOperations(str) << endl; return 0; }
Enter the string: Minimum operations: 0
Betrachten Sie die Zeichenfolge „abcdd“. Das Zeichen „d“ kommt häufiger vor als jedes andere Zeichen. Daher sollten wir alle anderen Zeichen in „d“ ändern. Die ASCII-Werte von 'a', 'b' und 'c' sind 97, 98 bzw. 99. Die minimale Anzahl von Operationen beträgt also (100-97) + (100-98) + (100-99) = 3 + 2 + 1 = 6. Da wir jedoch die Anzahl der Operationen minimieren müssen, dekrementieren wir stattdessen die ASCII-Werte von „a“, „b“ und „c“. In diesem Fall die Mindestanzahl der Operationen beträgt (97-97) + (98-97) + (99-97) = 0 + 1 + 2 = 3.
In diesem Artikel haben wir gesehen, wie man einzigartige Probleme im Zusammenhang mit ASCII-Wert- und String-Manipulation in C++ löst.
Das obige ist der detaillierte Inhalt vonMachen Sie alle Zeichen in der Zeichenfolge gleich, indem Sie den minimalen ASCII-Wert erhöhen oder verringern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!