Heim > Artikel > Backend-Entwicklung > Übersetzen Sie für Q-Abfragen Folgendes ins Chinesische: In einer ternären Zeichenfolge die Mindestanzahl an Zeichen, die ersetzt werden müssen, um alle palindromischen Teilzeichenfolgen zu entfernen
Ein Palindrom-String ist ein String, der seinem umgekehrten String entspricht. Bei einer gegebenen Zeichenfolge mit „0“, „1“ und „2“ und einem Array Q der Länge N stellt jeder Index des angegebenen Arrays einen Bereich dar, und der Bereich wird durch ein Wertepaar der Form dargestellt. Wir müssen die Mindestanzahl an Zeichen ermitteln, die in einem bestimmten Bereich ersetzt werden müssen, um sicherzustellen, dass der Bereich keine palindromischen Teilzeichenfolgen enthält.
Input1: string s: “01001020002”, int Q = {{0,4}, {2,5}, {5,10}};
Output: 1 1 3Die chinesische Übersetzung von
Für den Bereich 0 bis 4 haben wir zwei Palindrome 010 und 1001, wir können den Index 2 in „2“ ändern, sodass keine Palindrome mehr vorhanden sind.
Für den Bereich 2 bis 5 haben wir nur eine Palindromzahl, nämlich 010, die geändert werden kann, indem die erste Null in 2 geändert wird.
Für Zahlen im Bereich von 5 bis 10 haben wir die Palindromzahlen 020, 000 und 20002. Wir können die erste 2 in „1“, die „0“ des nächsten Index in „2“ und den Wert des vorletzten Index in „1“ ändern, um alle Palindrome zu entfernen.
Die chinesische Übersetzung von „Naiver Ansatz“ lautet: „Naiver Ansatz“.Für rekursive Aufrufe müssen wir den Raum N beibehalten, was bedeutet, dass die Raumkomplexität O(N) ist.
Dynamische Planung
Die chinesische Übersetzung vonIdee
lautet:Wir werden ein dp-Array oder einen dp-Vektor verwenden, um alle möglichen Fälle zu speichern. Jede Sequenz ergibt eine geringere Anzahl von Zeichen und wir werden diese Sequenz verwenden.
Umsetzung
Im Implementierungsteil erstellen wir zunächst eine Funktion, die eine Zeichenfolge, eine Sequenz, einen DP-Vektor und eine Anzahl von Sequenzen als Parameter akzeptiert und den DP-Vektor aktualisiert.
Wir werden eine weitere Funktion erstellen, in der wir alle möglichen Sequenzen manuell eingeben, sie in einem Array speichern und einen DP-Vektor erstellen.
Wir rufen die obige Funktion auf, indem wir den Wert zur Vorverarbeitung übergeben, und beantworten dann jede Abfrage, indem wir sie einzeln durchgehen.
Die chinesische Übersetzung vonBeispiel
lautet:Beispiel
#include <bits/stdc++.h> #define SIZE 100005 using namespace std; // function to get the pre-processing of the results void preprocess(string& str, string& seq, vector<vector<int>>&dp, int n, int i){ dp[i][0] = (str[0] != seq[0]); // initialzie dp vector for (int j = 1; j < n; j++) { // storing the results if matched then adding zero otherwise one dp[i][j] = dp[i][j - 1] + (str[j] != seq[j % 3]); } return; } // function to find the number of changes required for each query void changesReq(string str, vector<pair<int, int>> Q){ int len = str.length(); // size of the given string int q = Q.size(); // number of queries vector<vector<int>>dp(6,vector<int>(len)); // dp vector to store the states results // vector to store each possible non-palindromic sequency vector<string> seq= { "012", "021", "102", "120", "201", "210" }; for (int i = 0; i < 6; i++){ // for each sequence storing state results in vector preprocess(str, seq[i], dp, len, i); } // getting all the queries for (int i = 0; i < q; i++){ int l = Q[i].first; int r = Q[i].second; int ans = INT_MAX; // finding the minimum cost amount for (int j = 0; j < 6; j++) { // Find the cost ans = min(ans, dp[j][r] - dp[j][l] + (str[l] != seq[j][l%3])); } cout <<ans<<" "; } } int main(){ string str = "01001020002"; vector<pair<int, int>>Q = {{0,4}, {2,5}, {5,10}}; // calling the function cout<<"The minimum characters to be replaced in the Ternary string to remove all palindromic substrings for Q queries is "<<endl; changesReq(str, Q); return 0; }
The minimum characters to be replaced in the Ternary string to remove all palindromic substrings for Q queries is 1 1 3Zeitliche und räumliche Komplexität
Die zeitliche Komplexität des obigen Codes beträgt O(N + Q), wobei N die Anzahl der Zeichen in der Zeichenfolge und Q die Anzahl der Abfragen ist. Die räumliche Komplexität des obigen Codes beträgt O(N), da wir den Zustand in einem Vektor der Größe N speichern.
Fazit
In diesem Tutorial haben wir einen Code implementiert, um die Mindestanzahl an Zeichen herauszufinden, die bei einigen Abfragen in einem bestimmten Bereich geändert werden müssen, damit keine Palindrom-Zeichenfolge zurückbleibt. Wir haben diesen Code mithilfe des Konzepts der dynamischen Programmierung mit einer zeitlichen Komplexität von O(N+Q) und einer räumlichen Komplexität von O(N) implementiert.
Das obige ist der detaillierte Inhalt vonÜbersetzen Sie für Q-Abfragen Folgendes ins Chinesische: In einer ternären Zeichenfolge die Mindestanzahl an Zeichen, die ersetzt werden müssen, um alle palindromischen Teilzeichenfolgen zu entfernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!