Heim  >  Artikel  >  Backend-Entwicklung  >  Die Mindestanzahl an Zeichen, die ersetzt werden müssen, damit die Zeichenfolgen zu einer Palindromzeichenfolge der Länge K verkettet werden

Die Mindestanzahl an Zeichen, die ersetzt werden müssen, damit die Zeichenfolgen zu einer Palindromzeichenfolge der Länge K verkettet werden

WBOY
WBOYnach vorne
2023-08-30 09:37:06934Durchsuche

Die Mindestanzahl an Zeichen, die ersetzt werden müssen, damit die Zeichenfolgen zu einer Palindromzeichenfolge der Länge K verkettet werden

Das Verfolgen der Mindestanzahl von Zeichen, um eine bestimmte Zeichenfolge in eine Verknüpfung palindromischer Teilzeichenfolgen der Länge K umzuwandeln, ist ein häufiges Problem im Bereich der Zeichenfolgensteuerung. Eine Zeichenfolge, die in denselben Schritten gelesen und invertiert wird, wird als Palindromzeichenfolge bezeichnet. Zum Beispiel „Radar“ oder „Füllstand“. In diesem Artikel werden die grundlegenden Konzepte, Methoden und möglichen Optimierungsstrategien zur effektiven Lösung dieses Problems behandelt. Am Ende dieses Artikels werden die Leser in der Lage sein, mit ähnlichen Problemen bei der String-Manipulation umzugehen, da sie die erforderlichen Schritte vollständig verstehen

Das Problem wird in den folgenden Abschnitten ausführlich erläutert und anschließend die Vor- und Nachteile der einzelnen Methoden besprochen. Ausgewählte Methoden werden eingehend untersucht und Codebeispiele bereitgestellt, um deren Verwendung zu zeigen. Wir werden auch die zeitliche Komplexität jeder Methode untersuchen, um zu sehen, wie effektiv sie bei unterschiedlicher Anzahl von Eingaben ist

Anwendungsmethode

  • Brute-Force-Methode

  • Schiebefenster-Ansatz

Die chinesische Übersetzung von

Brute-Force-Ansatz

lautet:

Brute-Force-Ansatz

Der Brute-Force-Ansatz zum Finden der wenigsten Zeichen, die ersetzt werden müssen, um eine Zeichenfolgenverkettung einer palindromischen Zeichenfolge der Länge K zu bilden, umfasst das Überprüfen aller möglichen Teilzeichenfolgen der Länge K innerhalb der angegebenen Zeichenfolge. Es sind folgende Schritte erforderlich: Setzen Sie zwei Zeiger. Ausgeräumt und nach rechts, bis zum Anfang und Ende der K-Zeichen-Teilzeichenfolge, initialisieren Sie eine Variable, um die wenigsten Ersetzungen zu verfolgen, und iterieren Sie über die Zeichenfolge, wobei Sie das Fenster mit dem richtigen Zeiger aktualisieren, der sich jedes Mal einen Schritt nach rechts bewegt. Überprüfen Sie, ob es sich um ein Palindrom handelt, indem Sie die Zeichen von links und rechts vergleichen, und zählen Sie die Anzahl der erforderlichen Ersetzungen für den Fall, dass es sich nicht um ein Palindrom handelt. Fahren Sie mit dieser Vorbereitung bis zum Schluss fort Das Ergebnis sind die wenigsten Ersetzungen, die erforderlich sind, um den angegebenen palindromischen Teilstring der Länge K zu realisieren. In jedem Fall ist dieser Ansatz zeitaufwändig, was ihn für große Strings verschwenderisch macht.

Algorithmus

  • Berücksichtigen Sie jeden Teilstring der Länge K, während Sie den bereitgestellten String durchlaufen.

  • Überprüfen Sie, ob jeder Teilstring ein Palindrom ist

  • Zählen Sie, wie viele Zeichen geändert werden müssten, wenn es nicht bereits ein Palindrom wäre.

  • Behalten Sie so wenige Teilzeichenfolgen wie möglich bei, die ersetzt werden müssen

  • Erstellen Sie ein Palindrom, indem Sie die Zeichen in der minimalen Ersatzteilzeichenfolge ändern.

Beispiel

#include <iostream>
#include <string>
using namespace std;

string minimalReplacementPalindromeSubstring(const string& str, int K) {
   int n = str.length();
   string minReplacementSubstr;

   for (int i = 0; i <= n - K; i++) {
      string substr = str.substr(i, K);
      int replacements = 0;
      for (int j = 0; j < K / 2; j++) {
         if (substr[j] != substr[K - 1 - j]) {
            replacements++;
         }
      }

      if (replacements < minReplacementSubstr.length() || minReplacementSubstr.empty()) {
         minReplacementSubstr = substr;
      }
   }

   return minReplacementSubstr;
}

int main() {
   string input = "iurefhuhfrati";
   int K = 4;

   string result = minimalReplacementPalindromeSubstring(input, K);
   cout << "Minimal Replacement Substring: " << result << endl;

   return 0;
}

Ausgabe

Minimal Replacement Substring: rati

Schiebefenster-Methode

Der Sliding-Window-Ansatz kann zur effizienten Lösung von Problemen verwendet werden, einschließlich Subarray- oder Substring-Operationen. Bei der Zeichenfolgenverkettung, bei der nach der Mindestanzahl von Zeichen gesucht wird, um eine Palindromzeichenfolge der Länge K zu erstellen, besteht die Methode darin, beim Navigieren durch die Eingabezeichenfolge ein Fenster mit fester Größe (Teilzeichenfolge) von K Zeichen beizubehalten

Die Berechnung setzt zwei Zeiger „links“ und „rechts“, die zunächst den Anfang und das Ende der K-Zeichen-Teilzeichenfolge angeben. Anschließend wird die Anzahl der Ersetzungen ermittelt, die erforderlich sind, um diesen Teilstring in ein Palindrom umzuwandeln. Um die Mindestanzahl der erforderlichen Ersetzungen im Auge zu behalten, wird eine Variable „min_replacements“ initialisiert.

Algorithmus

  • Setzen Sie zwei Zeiger, links und rechts, die jeweils auf den Anfang und das Ende der Haupt-K-Zeichen-Teilzeichenfolge zeigen.

  • Bestimmt die Anzahl der Ersetzungen, die erwartet werden, um einen Teilstring in ein Palindrom umzuwandeln.

  • Um die Mindestanzahl der erforderlichen Ersetzungen im Auge zu behalten, initialisieren Sie die Variable min_replacements

  • Aktualisieren Sie das Fenster, indem Sie den rechten Zeiger um eine Position nach rechts bewegen

  • Wenn das aktuelle Fenster ein Palindrom ist, bewegen Sie den rechten Zeiger

  • Berechnen Sie die Anzahl der erforderlichen Ersetzungen und ändern Sie bei Bedarf min_replacements, wenn das aktuelle Fenster kein Palindrom ist.

  • Um das Fenster zu aktualisieren, bewegen Sie den linken Zeiger eine Stelle nach rechts.

  • Bis zum Ende der Saite wiederholen Sie die Schritte 4 bis 7.

  • Die Zeichen des Teilstrings sollten durch möglichst wenige Ersetzungen ersetzt werden

Beispiel

#include <iostream>
#include <string>
using namespace std;

int minReplacementsForPalindrome(string s, int k) {
   int left = 0, right = k - 1, min_replacements = 0;
   while (right < s.length()) {
      int i = left, j = right;
      while (i < j) {
         if (s[i] != s[j])
            min_replacements++;
         i++;
         j--;
      }
      left++;
      right++;
   }
   return min_replacements;
}

int main() {
   string input_string = "abcxyzuvw"; // Replace this with your desired input string
   int k = 3; // Replace this with the desired value of K
   int result = minReplacementsForPalindrome(input_string, k);
   cout << "Minimum replacements required: " << result << endl;
   return 0;
}

Ausgabe

Minimum replacements required: 7

Fazit

Dieser Artikel untersucht das Problem der Mindestanzahl von Zeichen, um eine bestimmte Zeichenfolge in eine Palindrom-Teilzeichenfolge der Länge K umzuwandeln. Es untersucht zwei grundlegende Methoden zur Lösung dieses Problems: die Brute-Force-Methode und die Sliding-Window-Methode. Brute-Force-Methoden bestehen darin, alle möglichen Teilzeichenfolgen der Länge K in einer bestimmten Zeichenfolge zu überprüfen, festzustellen, ob es sich um Palindrome handelt, und auf notwendige Ersetzungen zu prüfen. Allerdings ist dieser Ansatz sehr komplex und für große Strings ineffizient

Andererseits optimiert der Schiebefenster-Ansatz diese Methode, indem er ein Fenster mit fester Größe beibehält und das Fenster beim Navigieren durch die Eingabezeichenfolge effizient aktualisiert. Dieser Artikel bietet Codetests und Erfahrungen, um Benutzern zu helfen, ähnliche Probleme bei der Zeichenfolgenverarbeitung besser zu verstehen und zu lösen.

Das obige ist der detaillierte Inhalt vonDie Mindestanzahl an Zeichen, die ersetzt werden müssen, damit die Zeichenfolgen zu einer Palindromzeichenfolge der Länge K verkettet werden. 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