


Menghasilkan semua rentetan yang mungkin terbentuk dengan menggantikan huruf dengan simbol sepadan yang diberikan
Menjana semua rentetan yang mungkin adalah untuk menggantikan aksara tertentu dalam rentetan dengan simbol yang sepadan dan menjana semua rentetan yang mungkin. Kami akan mendapat rentetan "s" bersaiz "N" dan peta tidak tertib "mp" pasangan aksara bersaiz "M". Di sini kita boleh menggantikan mp[i][0] dalam rentetan "s" dengan mp[i][1] supaya tugas kita ialah menjana semua rentetan yang mungkin.
Contoh Contoh
Input: s = “xyZ”, mp = {‘x’ : ‘$’, ‘y’ : ‘#’, ‘Z’ : ‘^’} Output: xyZ xy^ x#Z z#^ $yZ $y^ $#Z $#^
Penjelasan − Dalam contoh di atas, sejumlah 8 rentetan dijana.
Input: s = “pQ”, mp = {‘p’ : ‘#’, ‘Q’ : ‘$’} Output: pQ #Q p$ #$
Nota - Dalam contoh di atas, sejumlah 4 rentetan dijana.
Input: s = “w”, mp = {‘w’ : ‘#’} Output: w #
Penjelasan − Dalam contoh di atas, sejumlah 2 rentetan dijana.
Kaedah
Dalam kaedah ini kita akan menggunakan konsep kekerasan untuk mencari semua kombinasi yang mungkin.
Pertama, kami akan mencipta fungsi yang akan mengambil sebagai parameter rentetan, indeks semasa dan peta yang diberikan, dan jenis pemulangan akan terbatal.
Dalam fungsi ini kita akan menentukan syarat asas bahawa indeks semasa adalah sama dengan saiz rentetan dan kemudian kita akan mencetak rentetan dan mengembalikannya daripada fungsi.
Jika tidak, kita akan mempunyai dua pilihan, satu adalah untuk tidak menukar indeks semasa dan beralih ke yang seterusnya, yang akan sentiasa menjadi pilihan.
Pilihan kedua hanya boleh dilakukan jika watak semasa mempunyai pengganti. Sekiranya pengganti itu wujud, maka kami akan memanggil pengganti itu.
Selepas itu kami akan kembali dari fungsi dan ia akan secara automatik menghasilkan semua hasil yang diperlukan.
Mari kita bincangkan kod kaedah di atas untuk pemahaman yang lebih baik.
Contoh
#include <bits/stdc++.h> using namespace std; // Function to generate all possible strings by replacing the characters with paired symbols void possibleStrings(string str, int idx, unordered_map<char, char> mp){ if (idx == str.size()) { cout << str << endl; return; } // Function call with the idx-th character not replaced possibleStrings(str, idx + 1, mp); // Replace the idx-th character str[idx] = mp[str[idx]]; // Function call with the idx-th character replaced possibleStrings(str, idx + 1, mp); return; } int main(){ string str = "xyZ"; unordered_map<char, char> mp; mp['x'] = '$'; mp['y'] = '#'; mp['Z'] = '^'; mp['q'] = '&'; mp['2'] = '*'; mp['1'] = '!'; mp['R'] = '@'; int idx = 0; // Call 'possibleStrings' function to generate all possible strings //Here in the 'possible strings' function, we have passed string 'str', index 'idx', and map 'mp' possibleStrings(str, idx, mp); return 0; }
Output
xyZ xy^ x#Z x#^ $yZ $y^ $#Z $#^
Kerumitan masa dan ruang
Kerumitan masa kod di atas ialah O(N*2^N) kerana kita baru sahaja berundur pada elemen N, dengan N ialah saiz rentetan 's'.
Kerumitan ruang kod di atas ialah O(N*N), kerana kami menghantar rentetan sebagai rentetan lengkap dan mungkin terdapat N salinan rentetan pada masa yang sama.
Algoritma penjejakan belakang
Dalam kaedah sebelum ini, rentetan yang kami hantar tidak mempunyai penunjuk, yang mengakibatkan mengambil banyak ruang. Untuk mengurangkan kerumitan ruang dan masa, kami akan menggunakan konsep backtracking.
Contoh
#include <bits/stdc++.h> using namespace std; // Function to generate all possible strings by replacing the characters with paired symbols void possibleStrings(string& str, int idx, unordered_map<char, char> mp){ if (idx == str.size()) { cout << str << endl; return; } // Function call with the idx-th character not replaced possibleStrings(str, idx + 1, mp); // storing the current element char temp = str[idx]; // Replace the idx-th character str[idx] = mp[str[idx]]; // Function call with the idx-th character replaced possibleStrings(str, idx + 1, mp); // backtracking str[idx] = temp; return; } int main(){ string str = "xyZ"; unordered_map<char, char> mp; mp['x'] = '$'; mp['y'] = '#'; mp['Z'] = '^'; mp['q'] = '&'; mp['2'] = '*'; mp['1'] = '!'; mp['R'] = '@'; int idx = 0; // Call 'possibleStrings' function to generate all possible strings //Here in the 'possible strings' function, we have passed string 'str', index 'idx', and map 'mp' possibleStrings(str, idx, mp); return 0; }
Output
xyZ xy^ x#Z x#^ $yZ $y^ $#Z $#^
Kerumitan masa dan ruang
Kerumitan masa kod di atas ialah O(N*2^N) kerana kita baru sahaja berundur pada elemen N, dengan N ialah saiz rentetan 's'.
Kerumitan ruang bagi kod di atas ialah O(N), kerana kami menghantar alamat rentetan dan hanya akan terdapat paling banyak N tindanan yang akan turun.
Kesimpulan
Dalam tutorial ini, kami telah melaksanakan program untuk menjana semua rentetan yang mungkin dengan menggantikan huruf dengan simbol yang diberikan. Di sini, kita telah melihat kaedah penjejakan ke belakang, dan kerumitan masa kod ialah O(N*2^N), dengan N ialah saiz rentetan dan kerumitan ruang adalah sama dengan kerumitan masa. Untuk mengurangkan kerumitan ruang, kami telah melaksanakan proses penjejakan ke belakang.
Atas ialah kandungan terperinci Menghasilkan semua rentetan yang mungkin terbentuk dengan menggantikan huruf dengan simbol sepadan yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Terdapat perbezaan yang signifikan dalam bagaimana C# dan C melaksanakan dan ciri-ciri dalam pengaturcaraan berorientasikan objek (OOP). 1) Definisi kelas dan sintaks C# lebih ringkas dan menyokong ciri -ciri canggih seperti LINQ. 2) C menyediakan kawalan berbutir yang lebih baik, sesuai untuk pengaturcaraan sistem dan keperluan prestasi tinggi. Kedua -duanya mempunyai kelebihan mereka sendiri, dan pilihannya harus berdasarkan senario aplikasi tertentu.

Menukar dari XML ke C dan melakukan operasi data boleh dicapai melalui langkah -langkah berikut: 1) Parsing Fail XML menggunakan perpustakaan TinyXML2, 2) Pemetaan data ke dalam struktur data C, 3) Menggunakan perpustakaan standard C seperti STD :: Vektor untuk operasi data. Melalui langkah -langkah ini, data yang ditukar dari XML boleh diproses dan dimanipulasi dengan cekap.

C# menggunakan mekanisme pengumpulan sampah automatik, manakala C menggunakan pengurusan memori manual. 1. Pemungut Sampah C 2.C menyediakan kawalan memori yang fleksibel, sesuai untuk aplikasi yang memerlukan pengurusan yang baik, tetapi harus dikendalikan dengan berhati -hati untuk mengelakkan kebocoran ingatan.

C masih mempunyai kaitan penting dalam pengaturcaraan moden. 1) Keupayaan operasi prestasi tinggi dan perkakasan langsung menjadikannya pilihan pertama dalam bidang pembangunan permainan, sistem tertanam dan pengkomputeran berprestasi tinggi. 2) Paradigma pengaturcaraan yang kaya dan ciri -ciri moden seperti penunjuk pintar dan pengaturcaraan templat meningkatkan fleksibiliti dan kecekapannya. Walaupun lengkung pembelajaran curam, keupayaannya yang kuat menjadikannya masih penting dalam ekosistem pengaturcaraan hari ini.

C Pelajar dan pemaju boleh mendapatkan sumber dan sokongan dari StackOverflow, Komuniti R/CPP Reddit, Coursera dan EDX, Projek Sumber Terbuka di GitHub, Perkhidmatan Perundingan Profesional, dan CPPCON. 1. StackOverflow memberikan jawapan kepada soalan teknikal; 2. Komuniti R/CPP Reddit berkongsi berita terkini; 3. Coursera dan EDX menyediakan kursus f rasmi; 4. Projek sumber terbuka pada GitHub seperti LLVM dan meningkatkan kemahiran meningkatkan; 5. Perkhidmatan perundingan profesional seperti jetbrains dan perforce menyediakan sokongan teknikal; 6. CPPCON dan persidangan lain membantu kerjaya

C# sesuai untuk projek yang memerlukan kecekapan pembangunan tinggi dan sokongan silang platform, manakala C sesuai untuk aplikasi yang memerlukan prestasi tinggi dan kawalan asas. 1) C# Memudahkan pembangunan, menyediakan pengumpulan sampah dan perpustakaan kelas yang kaya, sesuai untuk aplikasi peringkat perusahaan. 2) C membolehkan operasi memori langsung, sesuai untuk pembangunan permainan dan pengkomputeran berprestasi tinggi.

C Alasan penggunaan berterusan termasuk prestasi tinggi, aplikasi luas dan ciri -ciri yang berkembang. 1) Prestasi kecekapan tinggi: C melaksanakan dengan baik dalam pengaturcaraan sistem dan pengkomputeran berprestasi tinggi dengan terus memanipulasi memori dan perkakasan. 2) Digunakan secara meluas: bersinar dalam bidang pembangunan permainan, sistem tertanam, dan lain -lain. 3) Evolusi berterusan: Sejak pembebasannya pada tahun 1983, C terus menambah ciri -ciri baru untuk mengekalkan daya saingnya.

Trend pembangunan masa depan C dan XML adalah: 1) C akan memperkenalkan ciri -ciri baru seperti modul, konsep dan coroutin melalui piawaian C 20 dan C 23 untuk meningkatkan kecekapan dan keselamatan pengaturcaraan; 2) XML akan terus menduduki kedudukan penting dalam pertukaran data dan fail konfigurasi, tetapi akan menghadapi cabaran JSON dan YAML, dan akan berkembang dengan lebih ringkas dan mudah untuk menghuraikan arahan, seperti penambahbaikan XMLSChema1.1 dan XPath3.1.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Dreamweaver Mac版
Alat pembangunan web visual

Dreamweaver CS6
Alat pembangunan web visual