Jadual Kandungan
的中文翻译为:
Rumah pembangunan bahagian belakang C++ Terjemahan: Untuk pertanyaan M, terbalikkan julat rentetan yang diberikan

Terjemahan: Untuk pertanyaan M, terbalikkan julat rentetan yang diberikan

Aug 25, 2023 pm 08:09 PM
rentetan Pertanyaan terbalik

Terjemahan: Untuk pertanyaan M, terbalikkan julat rentetan yang diberikan

Dalam masalah ini, kami akan melakukan pertanyaan terbalik M pada rentetan yang diberikan mengikut nilai tatasusunan.

Pendekatan naif untuk menyelesaikan masalah adalah untuk membalikkan setiap segmen rentetan mengikut nilai tatasusunan yang diberikan.

Pendekatan yang dioptimumkan menggunakan logik bahawa apabila kita membalikkan subrentetan yang sama dua kali, kita mendapat rentetan asal.

Pernyataan masalah − Kami telah memberikan rentetan alfa yang mengandungi aksara abjad. Selain itu, kami telah memberikan tatasusunan arr[] saiz M yang mengandungi integer positif. Kita perlu melakukan operasi M pada rentetan yang diberikan dan mengembalikan rentetan akhir.

Dalam setiap operasi, kita perlu mengambil arr[i] dan menghormati subrentetan arr[i] kepada N − arr[i] + 1.

示例例子

输入

alpha = "pqrst"; arr = {2, 1};
Salin selepas log masuk

输出

tqrsp
Salin selepas log masuk

Penjelasan 

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

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

输入

−  alpha = "pqrst"; arr = {1, 1};
Salin selepas log masuk

输出

 − ‘pqrst’
Salin selepas log masuk

Penjelasan − 如果我们对同一个查询执行偶数次,我们会得到相同的字笎东。

输入

 −  alpha = "pqrst"; arr = {1, 1, 1};
Salin selepas log masuk

输出

 − ‘tsrqp’
Salin selepas log masuk

Penjelasan − Jika kita melakukan pertanyaan yang sama untuk bilangan ganjil, kita mendapat rentetan terbalik.

Pendekatan 1

Dalam pendekatan ini, kami akan menggunakan kaedah reverse() untuk membalikkan subrentetan. Kami akan mengambil petunjuk permulaan dan penamat menggunakan pertanyaan yang diberikan dan membalikkan subrentetan rentetan yang diberikan.

Algoritma

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

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

Langkah 3 − Mulakan pembolehubah 'betul' dengan str_len − arr[p] + 1.

Langkah 4 − Gunakan kaedah reverse() untuk membalikkan subrentetan daripada penunjuk kiri ke penunjuk kanan.

Contoh

#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;
}
Salin selepas log masuk

输出

The string after performing queries is tqrsp
Salin selepas log masuk

Kerumitan masa − O(N*M) untuk membalikkan subrentetan M kali.

Kerumitan ruang − O(1) kerana kami tidak menggunakan sebarang ruang dinamik.

方法二

Dalam pendekatan ini, kami akan mengira indeks tertentu itu dan berapa kali dimasukkan dalam pembalikan menggunakan pertanyaan yang diberikan. Jika mana-mana indeks disertakan untuk bilangan kali genap, kami tidak perlu membalikkannya. Jika mana-mana indeks disertakan untuk bilangan kali ganjil dalam semua pertanyaan yang diberikan, kita perlu membalikkan aksara pada indeks tertentu.

Algoritma

步骤 1 - 初始化长度等于字符串长度的 'cnt' 列表,用 0 存储特定等于字符串长度的 'cnt' 列表,用 0 存储特定索厬厬的。

Langkah 2 − Lintas tatasusunan pertanyaan yang diberikan dan ambil penunjuk kiri dan kanan rentetan mengikut pertanyaan semasa.

Langkah 3 − Laksanakan juga fungsi changeRange() untuk mengemas kini senarai ‘cnt’ mengikut penunjuk kiri dan kanan pertanyaan semasa.

Langkah 3.1 − Dalam fungsi changeRange(), naikkan nilai pada indeks 'kiri' dalam senarai 'cnt'.

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

Di sini, kami perlu menambah semua nilai senarai 'cnt' sebanyak 1 dalam julat [kiri, kanan]. Jadi, kami hanya menambah cnt[kiri] sebanyak 1 kerana mengambil jumlah awalan akan menambah semua nilai sebanyak 1, iaitu di sebelah kanan indeks 'kiri'. Selain itu, kami tidak mahu menambah nilai cnt antara indeks [right, str_len], jadi kami telah mengurangkannya sebanyak 1 kerana jumlah awalan akan meningkatkannya sebanyak 1.

Langkah 4 − Seterusnya, laksanakan fungsi getPrefixSum() untuk mengira jumlah awalan senarai 'cnt'.

Langkah 4.1 − Dalam fungsi getPrefixSum(), lintasi rentetan dan tambahkan nilai elemen sebelumnya pada elemen semasa.

步骤 5 - 接下来,以逆序遍历‘cnt’列表。如果当前元素是奇数,则将序遍历‘cnt’列表。如果当前元素是奇数,则将劬父子了

步骤 6 - 用0初始化‘p’和‘q’,按照原始顺序遍历‘cnt’列表。

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

Langkah 8 − Pada penghujung, kembalikan rentetan alfa.

Contoh

的中文翻译为:

示例

#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;
}
Salin selepas log masuk

输出

The string after performing queries is: tqrsp
Salin selepas log masuk
Kerumitan masa − O(M*N + N), di mana O(M*N) adalah untuk mengemas kini senarai 'cnt' mengikut pertanyaan, dan O(N) adalah untuk mengemas kini rentetan yang diberikan.

空间复杂度 - 使用 'cnt' 列表为 O(N)。

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

Atas ialah kandungan terperinci Terjemahan: Untuk pertanyaan M, terbalikkan julat rentetan yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

12306 Cara menyemak rekod pembelian tiket sejarah Cara menyemak rekod pembelian tiket sejarah 12306 Cara menyemak rekod pembelian tiket sejarah Cara menyemak rekod pembelian tiket sejarah Mar 28, 2024 pm 03:11 PM

Muat turun versi terbaharu aplikasi tempahan tiket 12306 Ia adalah perisian pembelian tiket perjalanan yang semua orang sangat berpuas hati dengannya -pengesahan nama untuk membeli tiket dalam talian Semua pengguna Anda boleh membeli tiket perjalanan dan tiket penerbangan dengan mudah dan menikmati diskaun yang berbeza. Anda juga boleh mula menempah tempahan terlebih dahulu untuk merebut tiket Anda boleh menempah hotel atau pemindahan kereta khas Dengan itu, anda boleh pergi ke mana-mana yang anda mahu pergi dan membeli tiket dengan satu klik lebih mudah dan memudahkan semua orang lebih selesa. Kini editor memperincikannya dalam talian Menyediakan 12306 pengguna cara untuk melihat rekod pembelian tiket sejarah. 1. Buka Keretapi 12306, klik Saya di sudut kanan bawah, dan klik Pesanan Saya 2. Klik Dibayar pada halaman pesanan. 3. Pada halaman berbayar

Bagaimana untuk menyemak kelayakan akademik anda di Xuexin.com Bagaimana untuk menyemak kelayakan akademik anda di Xuexin.com Mar 28, 2024 pm 04:31 PM

Bagaimana untuk menyemak kelayakan akademik saya di Xuexin.com? Anda boleh menyemak kelayakan akademik anda di Xuexin.com Ramai pengguna tidak tahu cara menyemak kelayakan akademik mereka di Xuexin.com Seterusnya, editor membawakan tutorial grafik kepada pengguna tentang cara menyemak kelayakan akademik mereka di Xuexin.com pengguna datang dan lihat! Tutorial penggunaan Xuexin.com: Cara menyemak kelayakan akademik anda di Xuexin.com 1. Pintu masuk Xuexin.com: https://www.chsi.com.cn/ 2. Pertanyaan laman web: Langkah 1: Klik pada alamat Xuexin.com di atas untuk masuk ke laman utama Klik [Education Query]; Langkah 4: Pada halaman log masuk Masukkan maklumat dan klik [Log Masuk];

Penjelasan terperinci tentang kaedah menukar jenis int kepada rentetan dalam PHP Penjelasan terperinci tentang kaedah menukar jenis int kepada rentetan dalam PHP Mar 26, 2024 am 11:45 AM

Penjelasan terperinci tentang kaedah menukar jenis int kepada rentetan dalam PHP Dalam pembangunan PHP, kita sering menghadapi keperluan untuk menukar jenis int kepada jenis rentetan. Penukaran ini boleh dicapai dalam pelbagai cara Artikel ini akan memperkenalkan beberapa kaedah biasa secara terperinci, dengan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Gunakan fungsi terbina dalam PHP strval(). PHP menyediakan fungsi terbina dalam strval() yang boleh menukar pembolehubah jenis yang berbeza kepada jenis rentetan. Apabila kita perlu menukar jenis int kepada jenis rentetan,

Bagaimana untuk mengulangi rentetan dalam python_python mengulangi tutorial rentetan Bagaimana untuk mengulangi rentetan dalam python_python mengulangi tutorial rentetan Apr 02, 2024 pm 03:58 PM

1. Mula-mula buka pycharm dan masukkan halaman utama pycharm. 2. Kemudian buat skrip python baru, klik kanan - klik baru - klik pythonfile. 3. Masukkan rentetan, kod: s="-". 4. Kemudian anda perlu mengulang simbol dalam rentetan sebanyak 20 kali, kod: s1=s*20 5. Masukkan kod output cetakan, kod: print(s1). 6. Akhir sekali jalankan skrip dan anda akan melihat nilai pulangan kami di bahagian bawah: - diulang 20 kali.

Bagaimana untuk menentukan sama ada rentetan Golang berakhir dengan aksara yang ditentukan Bagaimana untuk menentukan sama ada rentetan Golang berakhir dengan aksara yang ditentukan Mar 12, 2024 pm 04:48 PM

Tajuk: Bagaimana untuk menentukan sama ada rentetan berakhir dengan aksara tertentu dalam Golang Dalam bahasa Go, kadangkala kita perlu menentukan sama ada rentetan berakhir dengan aksara tertentu Ini adalah perkara biasa semasa memproses rentetan. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan fungsi ini dan memberikan contoh kod untuk rujukan anda. Mula-mula, mari kita lihat cara untuk menentukan sama ada rentetan berakhir dengan aksara tertentu dalam Golang. Aksara dalam rentetan dalam Golang boleh diperoleh melalui pengindeksan, dan panjang rentetan itu boleh

Bagaimana untuk menyemak sama ada rentetan bermula dengan aksara tertentu dalam Golang? Bagaimana untuk menyemak sama ada rentetan bermula dengan aksara tertentu dalam Golang? Mar 12, 2024 pm 09:42 PM

Bagaimana untuk menyemak sama ada rentetan bermula dengan aksara tertentu dalam Golang? Apabila pengaturcaraan di Golang, anda sering menghadapi situasi di mana anda perlu menyemak sama ada rentetan bermula dengan aksara tertentu. Untuk memenuhi keperluan ini, kita boleh menggunakan fungsi yang disediakan oleh pakej rentetan di Golang untuk mencapainya. Seterusnya, kami akan memperkenalkan secara terperinci cara menggunakan Golang untuk menyemak sama ada rentetan bermula dengan aksara tertentu, dengan contoh kod tertentu. Di Golang, kita boleh menggunakan HasPrefix daripada pakej rentetan

Perbandingan persamaan dan perbezaan antara MySQL dan PL/SQL Perbandingan persamaan dan perbezaan antara MySQL dan PL/SQL Mar 16, 2024 am 11:15 AM

MySQL dan PL/SQL ialah dua sistem pengurusan pangkalan data yang berbeza, mewakili ciri pangkalan data hubungan dan bahasa prosedur masing-masing. Artikel ini akan membandingkan persamaan dan perbezaan antara MySQL dan PL/SQL, dengan contoh kod khusus untuk digambarkan. MySQL ialah sistem pengurusan pangkalan data hubungan popular yang menggunakan Bahasa Pertanyaan Berstruktur (SQL) untuk mengurus dan mengendalikan pangkalan data. PL/SQL ialah bahasa prosedur yang unik untuk pangkalan data Oracle dan digunakan untuk menulis objek pangkalan data seperti prosedur tersimpan, pencetus dan fungsi. sama

Cara memintas rentetan dalam bahasa Go Cara memintas rentetan dalam bahasa Go Mar 13, 2024 am 08:33 AM

Bahasa Go ialah bahasa pengaturcaraan yang berkuasa dan fleksibel yang menyediakan fungsi pemprosesan rentetan yang kaya, termasuk pemintasan rentetan. Dalam bahasa Go, kita boleh menggunakan kepingan untuk memintas rentetan. Seterusnya, kami akan memperkenalkan secara terperinci cara memintas rentetan dalam bahasa Go, dengan contoh kod khusus. 1. Gunakan penghirisan untuk memintas rentetan Dalam bahasa Go, anda boleh menggunakan ungkapan menghiris untuk memintas sebahagian daripada rentetan. Sintaks ungkapan slice adalah seperti berikut: slice:=str[start:end]where, s

See all articles