Inhaltsverzeichnis
Ansatz 1
Algorithmus
Beispiel
输出
方法二
示例
Heim Backend-Entwicklung C++ Übersetzung: Kehren Sie bei M-Abfragen den Bereich der angegebenen Zeichenfolge um

Übersetzung: Kehren Sie bei M-Abfragen den Bereich der angegebenen Zeichenfolge um

Aug 25, 2023 pm 08:09 PM
字符串 查询 反转

Übersetzung: Kehren Sie bei M-Abfragen den Bereich der angegebenen Zeichenfolge um

In diesem Problem führen wir M umgekehrte Abfragen für die angegebene Zeichenfolge gemäß den Array-Werten durch.

Der naive Ansatz zur Lösung des Problems besteht darin, jedes String-Segment entsprechend dem angegebenen Array-Wert umzukehren.

Der optimierte Ansatz verwendet die Logik, dass wir die ursprüngliche Zeichenfolge erhalten, wenn wir denselben Teilstring zweimal umkehren.

Problemstellung − Wir haben eine Alphazeichenfolge angegeben, die die alphabetischen Zeichen enthält. Außerdem haben wir ein arr[]-Array der Größe M angegeben, das die positiven ganzen Zahlen enthält. Wir müssen die M-Operationen für die angegebene Zeichenfolge ausführen und die endgültige Zeichenfolge zurückgeben.

In jeder Operation müssen wir arr[i] nehmen und den Teilstring arr[i] zu N − arr[i] + 1 umwandeln.

示例例子

输入

alpha = "pqrst"; arr = {2, 1};
Nach dem Login kopieren

输出

tqrsp
Nach dem Login kopieren

Erklärung 

  • 执行第一个查询后,字符串变为 'psrqt'。

  • 执行第二个查询后,我们得到了 'tqrsp'。

输入

−  alpha = "pqrst"; arr = {1, 1};
Nach dem Login kopieren

输出

 − ‘pqrst’
Nach dem Login kopieren

Explanation − 如果我们对同一个查询执行偶数次,我们会得到相同的字符串.

输入

 −  alpha = "pqrst"; arr = {1, 1, 1};
Nach dem Login kopieren

输出

 − ‘tsrqp’
Nach dem Login kopieren

Erklärung − Wenn wir dieselbe Abfrage ungerade oft ausführen, erhalten wir die Umkehrung der Zeichenfolge.

Ansatz 1

Bei diesem Ansatz verwenden wir die Methode reverse(), um den Teilstring umzukehren. Wir nehmen die Start- und Endzeiger mithilfe der angegebenen Abfrage und kehren den Teilstring des angegebenen Strings um.

Algorithmus

步骤 1 - 开始遍历查询数组.

第2步 - 使用arr[p] - 1初始化'left'变量.

Schritt 3 − Initialisieren Sie die ‚richtige‘ Variable mit str_len − arr[p] + 1.

Schritt 4 - Verwenden Sie die Methode reverse(), um den Teilstring vom linken Zeiger zum rechten Zeiger umzukehren.

Beispiel

#include <bits/stdc++.h>
using namespace std;

void reverseStrings(string &alpha, int str_len, vector<int> &arr, int arr_len){
    // Traverse all queries
    for (int p = 0; p < arr_len; p++){
        // Get starting pointer
        int left = arr[p] - 1;
        // Ending pointer
        int right = str_len - arr[p] + 1;
        // Reverse the string
        reverse(alpha.begin() + left, alpha.begin() + right);
    }
}
int main(){
    int str_len = 5;
    string alpha = "pqrst";
    int arr_len = 2;
    vector<int> arr = {2, 1};
    reverseStrings(alpha, str_len, arr, arr_len);
    cout << "The string after performing queries is " << alpha << endl;
    return 0;
}
Nach dem Login kopieren

输出

The string after performing queries is tqrsp
Nach dem Login kopieren

Zeitkomplexität − O(N*M) zum M-fachen Umkehren des Teilstrings.

Raumkomplexität − O(1), da wir keinen dynamischen Raum verwenden.

方法二

Bei diesem Ansatz berechnen wir diesen bestimmten Index und wie oft er in die Umkehrung einbezogen wird, indem wir bestimmte Abfragen verwenden. Wenn ein Index gerade oft enthalten ist, müssen wir ihn nicht umkehren. Wenn ein Index in allen angegebenen Abfragen ungerade oft enthalten ist, müssen wir das Zeichen an bestimmten Indizes umkehren.

Algorithmus

步骤 1 - 初始化长度等于字符串长度的 'cnt' 列表, 用 0. 存储特定索引在反转中出现的次数。

Schritt 2 - Durchlaufen Sie das Array der angegebenen Abfragen und nehmen Sie einen linken und rechten Zeiger der Zeichenfolge entsprechend der aktuellen Abfrage.

Schritt 3 − Führen Sie außerdem die Funktion „changeRange()“ aus, um die „cnt“-Liste entsprechend den linken und rechten Zeigern der aktuellen Abfrage zu aktualisieren.

Schritt 3.1 − Erhöhen Sie in der Funktion „changeRange()“ den Wert am „linken“ Index in der „cnt“-Liste.

第3.2步 - 减小„cnt“列表中位于„right + 1“指针右侧的所有值。

Hier mussten wir alle Werte der „cnt“-Liste im Bereich [links, rechts] um 1 erhöhen. Daher haben wir nur cnt[left] um 1 erhöht, da bei Verwendung der Präfixsumme alle Werte um 1 erhöht werden, was rechts vom „linken“ Index liegt. Außerdem möchten wir die cnt-Werte zwischen den Indizes [right, str_len] nicht erhöhen, daher haben wir sie bereits um 1 dekrementiert, da die Präfixsumme sie um 1 erhöht.

Schritt 4 − Als nächstes führen Sie die Funktion getPrefixSum() aus, um die Präfixsumme der „cnt“-Liste zu berechnen.

Schritt 4.1 - Durchlaufen Sie in der Funktion getPrefixSum() die Zeichenfolge und addieren Sie den Wert des vorherigen Elements zum aktuellen Element.

步骤 5 - 接下来,以逆序遍历‘cnt’列表.如果当前元素是奇数,则将其追加到‘tmp’字符串中.

步骤 6 - 用0初始化‘p‘ und ‚q‘, 按照原始顺序遍历‘cnt‘列表.

步骤 7 − 如果‘cnt’列表中的当前元素是奇数, 则使用tmp[q]更新alpha[p]。

Schritt 8 − Am Ende geben Sie die Alpha-Zeichenfolge zurück.

Beispiel

的中文翻译为:

示例

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

void changeRange(vector<int>& cnt, int left, int right) {
    // Increase the value of the left index
    cnt[left]++;
    // Decrement value for all indexes after the right index
    if (right + 1 < cnt.size())
        cnt[right + 1]--;
}
void getPrefixSum(vector<int>& cnt) {
    // Calculate prefix sum
    for (int p = 1; p < cnt.size(); p++) {
        cnt[p] += cnt[p - 1];
    }
}
string reverseStrings(string alpha, int str_len, vector<int>& arr, int arr_len) {
    vector<int> cnt(str_len, 0);
    // Traverse the array
    for (int p = 0; p < arr_len; p++) {
        int left = arr[p] <= (str_len + 1) / 2 ? arr[p] - 1 : str_len - arr[p];
        int right = arr[p] <= (str_len + 1) / 2 ? str_len - arr[p] : arr[p] - 1;
        // Changes index ranges between left and right
        changeRange(cnt, left, right);
    }
    getPrefixSum(cnt);
    string tmp;
    // Store characters with the odd reversal in the reverse order in the tmp string
    for (int p = cnt.size() - 1; p >= 0; p--) {
        if (cnt[p] % 2 != 0)
            tmp.push_back(alpha[p]);
    }
    int p = 0, q = 0;
    // For even reversal, pick the character from the original string.
    // For odd reversal, pick the character from the temp string.
    for (p = 0; p < cnt.size(); p++) {
        if (cnt[p] % 2 != 0)
            alpha[p] = tmp[q++];
    }
    // Answer string
    return alpha;
}
int main() {
    int str_len = 5;
    string alpha = "pqrst";
    int arr_len = 2;
    vector<int> arr = { 2, 1 };
    alpha = reverseStrings(alpha, str_len, arr, arr_len);
    cout << "The string after performing queries is: " <<alpha << endl;
    return 0;
}
Nach dem Login kopieren

输出

The string after performing queries is: tqrsp
Nach dem Login kopieren

Zeitkomplexität − O(M*N + N), wobei O(M*N) die „cnt“-Liste entsprechend der Abfrage aktualisieren soll und O(N) die angegebene Zeichenfolge aktualisieren soll.

空间复杂度 - 使用 'cnt' ist O(N)。

在第一种方法中,我们使用了reveres()方法来执行给定字符串上的所有查询.在第二种方法中,我们使用了前缀和技术来计算特定索引在反转中出现的次数。

Das obige ist der detaillierte Inhalt vonÜbersetzung: Kehren Sie bei M-Abfragen den Bereich der angegebenen Zeichenfolge um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

12306 So überprüfen Sie historische Ticketkaufdatensätze. So überprüfen Sie historische Ticketkaufdatensätze 12306 So überprüfen Sie historische Ticketkaufdatensätze. So überprüfen Sie historische Ticketkaufdatensätze Mar 28, 2024 pm 03:11 PM

Laden Sie die neueste Version der Ticketbuchungs-App 12306 herunter, mit der jeder sehr zufrieden ist. Es gibt viele Ticketquellen, die in der Software bereitgestellt werden -Namenauthentifizierung zum Online-Kauf von Tickets. Alle Benutzer können ganz einfach Reisetickets und Flugtickets kaufen und verschiedene Ermäßigungen genießen. Sie können auch im Voraus mit der Buchung beginnen, um Tickets zu erhalten. Damit können Sie mit einem Klick dorthin fahren, wo Sie möchten, und so das Reisen einfacher und bequemer gestalten Noch komfortabler: Der Herausgeber stellt die Details jetzt online dar. Bietet 12306 Benutzern die Möglichkeit, historische Ticketkaufaufzeichnungen einzusehen. 1. Öffnen Sie Railway 12306, klicken Sie unten rechts auf „Mein“ und dann auf „Meine Bestellung“. 2. Klicken Sie auf der Bestellseite auf „Bezahlt“. 3. Auf der kostenpflichtigen Seite

So überprüfen Sie Ihre akademischen Qualifikationen auf Xuexin.com So überprüfen Sie Ihre akademischen Qualifikationen auf Xuexin.com Mar 28, 2024 pm 04:31 PM

Wie kann ich meine akademischen Qualifikationen auf Xuexin.com überprüfen? Sie können Ihre akademischen Qualifikationen auf Xuexin.com überprüfen. Viele Benutzer wissen nicht, wie sie ihre akademischen Qualifikationen auf Xuexin.com überprüfen können Benutzer kommen vorbei und schauen sich um! Tutorial zur Nutzung von Xuexin.com: So überprüfen Sie Ihre akademischen Qualifikationen auf Xuexin.com 1. Zugang zu Xuexin.com: https://www.chsi.com.cn/ 2. Website-Abfrage: Schritt 1: Klicken Sie auf die Adresse von Xuexin.com Um die Startseite aufzurufen, klicken Sie oben auf [Bildungsabfrage]; Schritt 2: Klicken Sie auf der neuesten Webseite auf [Abfrage], wie durch den Pfeil in der Abbildung unten dargestellt. Schritt 3: Klicken Sie dann auf der neuen Seite auf [Anmelden bei akademischer Kreditdatei]. Schritt 4: Geben Sie auf der Anmeldeseite die Informationen ein und klicken Sie auf [Anmelden].

Detaillierte Erläuterung der Methode zum Konvertieren des Typs „int' in „string' in PHP Detaillierte Erläuterung der Methode zum Konvertieren des Typs „int' in „string' in PHP Mar 26, 2024 am 11:45 AM

Ausführliche Erläuterung der Methode zum Konvertieren des Typs int in einen String in PHP. Bei der PHP-Entwicklung stoßen wir häufig auf die Notwendigkeit, den Typ int in einen String-Typ zu konvertieren. Diese Konvertierung kann auf verschiedene Weise erreicht werden. In diesem Artikel werden verschiedene gängige Methoden im Detail vorgestellt, mit spezifischen Codebeispielen, um den Lesern das Verständnis zu erleichtern. 1. Verwenden Sie die integrierte Funktion strval() von PHP. PHP bietet eine integrierte Funktion strval(), die Variablen verschiedener Typen in String-Typen konvertieren kann. Wenn wir den Typ int in den Typ string konvertieren müssen,

So wiederholen Sie eine Zeichenfolge in Python_Tutorial zum Wiederholen von Zeichenfolgen in Python So wiederholen Sie eine Zeichenfolge in Python_Tutorial zum Wiederholen von Zeichenfolgen in Python Apr 02, 2024 pm 03:58 PM

1. Öffnen Sie zuerst Pycharm und rufen Sie die Pycharm-Homepage auf. 2. Erstellen Sie dann ein neues Python-Skript, klicken Sie mit der rechten Maustaste – klicken Sie auf „Neu“ – klicken Sie auf „Pythondatei“. 3. Geben Sie eine Zeichenfolge ein, Code: s="-". 4. Dann müssen Sie die Symbole in der Zeichenfolge 20 Mal wiederholen, Code: s1=s*20 5. Geben Sie den Druckausgabecode ein, Code: print(s1). 6. Führen Sie abschließend das Skript aus und Sie sehen unten unseren Rückgabewert: - 20 Mal wiederholt.

So ermitteln Sie, ob eine Golang-Zeichenfolge mit einem bestimmten Zeichen endet So ermitteln Sie, ob eine Golang-Zeichenfolge mit einem bestimmten Zeichen endet Mar 12, 2024 pm 04:48 PM

Titel: So ermitteln Sie, ob eine Zeichenfolge in Golang mit einem bestimmten Zeichen endet. In der Go-Sprache müssen wir manchmal feststellen, ob eine Zeichenfolge mit einem bestimmten Zeichen endet. In diesem Artikel wird erläutert, wie Sie diese Funktion mithilfe der Go-Sprache implementieren, und es werden Codebeispiele als Referenz bereitgestellt. Schauen wir uns zunächst an, wie Sie in Golang feststellen können, ob eine Zeichenfolge mit einem bestimmten Zeichen endet. Die Zeichen in einer Zeichenfolge in Golang können durch Indizierung ermittelt werden, und die Länge der Zeichenfolge kann ermittelt werden

Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Mar 12, 2024 pm 09:42 PM

Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Beim Programmieren in Golang kommt es häufig vor, dass Sie prüfen müssen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt. Um diese Anforderung zu erfüllen, können wir die vom Strings-Paket in Golang bereitgestellten Funktionen verwenden, um dies zu erreichen. Als Nächstes stellen wir anhand spezifischer Codebeispiele ausführlich vor, wie Sie mit Golang überprüfen können, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt. In Golang können wir HasPrefix aus dem Strings-Paket verwenden

Vergleich der Ähnlichkeiten und Unterschiede zwischen MySQL und PL/SQL Vergleich der Ähnlichkeiten und Unterschiede zwischen MySQL und PL/SQL Mar 16, 2024 am 11:15 AM

MySQL und PL/SQL sind zwei unterschiedliche Datenbankverwaltungssysteme, die die Merkmale relationaler Datenbanken bzw. prozeduraler Sprachen darstellen. In diesem Artikel werden die Ähnlichkeiten und Unterschiede zwischen MySQL und PL/SQL anhand konkreter Codebeispiele zur Veranschaulichung verglichen. MySQL ist ein beliebtes relationales Datenbankverwaltungssystem, das Structured Query Language (SQL) zum Verwalten und Betreiben von Datenbanken verwendet. PL/SQL ist eine für Oracle-Datenbanken einzigartige prozedurale Sprache und wird zum Schreiben von Datenbankobjekten wie gespeicherten Prozeduren, Triggern und Funktionen verwendet. Dasselbe

So fangen Sie eine Zeichenfolge in der Go-Sprache ab So fangen Sie eine Zeichenfolge in der Go-Sprache ab Mar 13, 2024 am 08:33 AM

Die Go-Sprache ist eine leistungsstarke und flexible Programmiersprache, die umfangreiche Funktionen zur Zeichenfolgenverarbeitung bietet, einschließlich des Abfangens von Zeichenfolgen. In der Go-Sprache können wir Slices verwenden, um Zeichenfolgen abzufangen. Als Nächstes stellen wir anhand spezifischer Codebeispiele ausführlich vor, wie Zeichenfolgen in der Go-Sprache abgefangen werden. 1. Verwenden Sie Slicing, um eine Zeichenfolge abzufangen. In der Go-Sprache können Sie Slicing-Ausdrücke verwenden, um einen Teil einer Zeichenfolge abzufangen. Die Syntax des Slice-Ausdrucks lautet wie folgt: Slice:=str[Start:End]wo, s

See all articles