cari
Rumahpembangunan bahagian belakangC++Kod yang ditulis dalam C++: Cari rentetan terkecil dari segi leksikografi yang terdiri daripada huruf K pertama abjad dan aksara bersebelahan tidak boleh sama

Kod yang ditulis dalam C++: Cari rentetan terkecil dari segi leksikografi yang terdiri daripada huruf K pertama abjad dan aksara bersebelahan tidak boleh sama

Dalam dunia pengaturcaraan, menyelesaikan masalah manipulasi rentetan adalah cabaran biasa dan menarik. Masalah utama yang dihadapi ialah bagaimana untuk mendapatkan rentetan leksikografi minimum menggunakan hanya huruf K abjad, sambil mematuhi kekangan tambahan seperti tidak sepadan dengan aksara bersebelahan. Dalam artikel ini, kami berhasrat untuk menyelidiki masalah ini dan mencadangkan penyelesaian yang berkesan menggunakan bahasa pengaturcaraan C++. Dengan memperincikan kaedah berbeza yang digunakan dalam tatabahasa dan menyediakan butiran algoritma langkah demi langkah, kami boleh memperkenalkan teknik inovatif yang bertujuan untuk mencapai hasil yang baik dalam bidang yang berbeza. Kami menyediakan panduan kod boleh laku yang lengkap untuk setiap kaedah untuk menjadikannya praktikal untuk pengguna.

Tatabahasa

Sebelum meneroka algoritma dan teknik, anda perlu menetapkan sintaks yang digunakan dalam coretan kod yang berikut.

std::string findLexSmallestString(int n, int k);

Dalam sintaks ini, n merujuk kepada bilangan huruf dalam abjad, k merujuk kepada bilangan huruf yang digunakan dan fungsi menjana rentetan tersusun leksikografi terendah yang memenuhi syarat yang ditetapkan.

Algoritma

Untuk menangani dan menyelesaikan cabaran mencari rentetan leksikografi minimum tanpa pengulangan antara aksara bersebelahan hanya menggunakan sehingga K huruf abjad, kami merumuskan pendekatan berkaedah dalam bentuk algoritma.

  • Mulakan rentetan kosong "ans" dan tatasusunan/vektor "digunakan" untuk menjejak aksara yang digunakan.

  • Mulakan lelaran daripada aksara pertama abjad.

  • Tambahkan aksara semasa pada `ans` dan tandakannya sebagai digunakan.

  • Jika "ans" mempunyai berbilang aksara dan dua aksara terakhir adalah sama, cari aksara yang tersedia seterusnya dengan mengulang daripada aksara semasa kepada "n".

  • Jika tiada aksara yang tersedia ditemui, undur dengan mengalih keluar aksara terakhir daripada "ans" dan tandakannya sebagai tidak digunakan.

  • Ulang langkah 3-5 sehingga "ans" mencapai panjang "k".

  • Kembalikan "ans" sebagai rentetan terkecil dari segi leksikografi di mana tiada dua aksara bersebelahan adalah sama, menggunakan semua huruf K pertama abjad.

Kaedah 1: Algoritma Tamak

Dalam kaedah ini, kami akan menggunakan strategi tamak untuk membina rentetan terkecil dari segi leksikografi. Proses yang sama menekankan pertimbangan yang teliti bagi setiap aksara dalam urutan sambil memastikan pilihan yang dibuat sepanjang proses ditumpukan pada meminimumkan nilai leksikografi keluaran keseluruhan.

Contoh

#include <iostream>
#include <vector>

std::string findLexSmallestGreedy(int n, int k) {
   std::string ans = "";
   std::vector<bool> used(n, false);

   for (int i = 0; i < n; i++) {
      for (int j = 0; j < k; j++) {
         if (!used[j]) {
            if (ans.empty() || ans.back() != 'a' + j) {
               ans += 'a' + j;
               used[j] = true;
               break;
            }
         }
      }
   }

   return ans;
}

int main() {
   int n = 5; // Assuming there are 5 letters in the alphabet
   int k = 3; // Assuming 3 letters will be used

   std::string result = findLexSmallestGreedy(n, k);
   std::cout << "Lexicographically Smallest String: " << result << std::endl;

   return 0;
}

Output

Lexicographically Smallest String: abc

Kaedah 2: Algoritma penjejakan ke belakang

Strategi ini melibatkan penggunaan menjejak ke belakang untuk mencari secara menyeluruh setiap gabungan watak sambil memastikan aksara berturut-turut tidak diulang. Oleh itu, dengan mempertimbangkan setiap aksara pada setiap kedudukan, kita boleh mencari rentetan terkecil dari segi leksikografi yang memenuhi kekangan yang diberikan.

Contoh

#include <iostream>
#include <vector>

bool findLexSmallestBacktracking(int n, int k, std::vector<char>& ans, std::vector<bool>& used) {
   if (ans.size() == k) {
      return true;
   }

   for (int i = 0; i < n; i++) {
      if (!used[i]) {
         if (ans.empty() || ans.back() != 'a' + i) {
            ans.push_back('a' + i);
            used[i] = true;

            if (findLexSmallestBacktracking(n, k, ans, used)) {
               return true;
            }

            ans.pop_back();
            used[i] = false;
         }
      }
   }

   return false;
}

std::string findLexSmallestStringBacktracking(int n, int k) {
   std::vector<char> ans;
   std::vector<bool> used(n, false);

   if (findLexSmallestBacktracking(n, k, ans, used)) {
      return std::string(ans.begin(), ans.end());
   }

   return "";
}

int main() {
   int n = 22;  // Assuming n = 22
   int k = 4;  // Assuming k = 4

   std::string result = findLexSmallestStringBacktracking(n, k);
   std::cout << "Lexicographically Smallest String: " << result << std::endl;

   return 0;
}

Output

Lexicographically Smallest String: abcd

Kesimpulan

Dalam artikel ini, kami meneroka masalah mencari rentetan terkecil dari segi leksikografi menggunakan huruf K pertama abjad, dengan kekangan bahawa dua aksara bersebelahan tidak boleh sama. Kami membincangkan sintaks dan menyediakan dua pendekatan berbeza untuk menyelesaikan masalah ini: algoritma tamak dan algoritma penjejakan ke belakang. Algoritma tamak menggunakan strategi untuk meminimumkan nilai leksikografi rentetan yang terhasil, manakala algoritma penjejakan belakang meneroka semua kombinasi yang mungkin untuk mencari rentetan yang dikehendaki. Contoh kod C++ yang disediakan menunjukkan pelaksanaan setiap kaedah dan membolehkan kami menjana rentetan minimum secara leksikografik dengan cekap. Berbekalkan pengetahuan ini, anda kini boleh menyelesaikan masalah manipulasi rentetan yang serupa dengan yakin dan mengoptimumkan kod anda dengan sewajarnya.

Atas ialah kandungan terperinci Kod yang ditulis dalam C++: Cari rentetan terkecil dari segi leksikografi yang terdiri daripada huruf K pertama abjad dan aksara bersebelahan tidak boleh sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:tutorialspoint. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Panjang umur c: memeriksa status semasaPanjang umur c: memeriksa status semasaApr 26, 2025 am 12:02 AM

C masih penting dalam pengaturcaraan moden kerana sifatnya yang cekap, fleksibel dan berkuasa. 1) C menyokong pengaturcaraan berorientasikan objek, sesuai untuk pengaturcaraan sistem, pembangunan permainan dan sistem tertanam. 2) Polimorfisme adalah kemuncak C, yang membolehkan panggilan untuk kaedah kelas yang diperoleh melalui penunjuk kelas asas atau rujukan untuk meningkatkan fleksibiliti dan skalabiliti kod.

C# vs Prestasi C: Penandaarasan dan PertimbanganC# vs Prestasi C: Penandaarasan dan PertimbanganApr 25, 2025 am 12:25 AM

Perbezaan prestasi antara C# dan C terutamanya dicerminkan dalam kelajuan pelaksanaan dan pengurusan sumber: 1) C biasanya melakukan lebih baik dalam pengiraan berangka dan operasi rentetan kerana ia lebih dekat dengan perkakasan dan tidak mempunyai overhead tambahan seperti pengumpulan sampah; 2) C# lebih ringkas dalam pengaturcaraan berbilang thread, tetapi prestasinya sedikit lebih rendah daripada C; 3) Bahasa yang harus dipilih harus ditentukan berdasarkan keperluan projek dan tumpukan teknologi pasukan.

C: Adakah ia mati atau hanya berkembang?C: Adakah ia mati atau hanya berkembang?Apr 24, 2025 am 12:13 AM

C isnotdying; it'sevolving.1) c suplemenvantduetoitsverversatilityandeficiencyinperformance-criticalapplications.2) thelanguageiscontinuouslyupdated, withc 20introducingfeatureslikemodulesandcoroutinestoMproveusability.3)

C Di Dunia Moden: Aplikasi dan IndustriC Di Dunia Moden: Aplikasi dan IndustriApr 23, 2025 am 12:10 AM

C digunakan secara meluas dan penting di dunia moden. 1) Dalam pembangunan permainan, C digunakan secara meluas untuk prestasi tinggi dan polimorfisme, seperti Unrealengine dan Perpaduan. 2) Dalam sistem perdagangan kewangan, latensi rendah C dan throughput yang tinggi menjadikannya pilihan pertama, sesuai untuk perdagangan frekuensi tinggi dan analisis data masa nyata.

C XML Perpustakaan: Membandingkan dan Berbeza PilihanC XML Perpustakaan: Membandingkan dan Berbeza PilihanApr 22, 2025 am 12:05 AM

Terdapat empat perpustakaan XML yang biasa digunakan di C: TinyXML-2, PugixML, Xerces-C, dan RapidXML. 1.TinyXML-2 sesuai untuk persekitaran dengan sumber terhad, fungsi ringan tetapi terhad. 2. PugixML cepat dan menyokong pertanyaan XPath, sesuai untuk struktur XML yang kompleks. 3.xerces-C berkuasa, menyokong resolusi DOM dan SAX, dan sesuai untuk pemprosesan kompleks. 4. RapidXML memberi tumpuan kepada prestasi dan parses sangat cepat, tetapi tidak menyokong pertanyaan XPath.

C dan XML: Meneroka hubungan dan sokonganC dan XML: Meneroka hubungan dan sokonganApr 21, 2025 am 12:02 AM

C Berinteraksi dengan XML melalui perpustakaan pihak ketiga (seperti TinyXML, PugixML, Xerces-C). 1) Gunakan perpustakaan untuk menghuraikan fail XML dan menukarnya ke dalam struktur data C-diproses. 2) Apabila menjana XML, tukar struktur data C ke format XML. 3) Dalam aplikasi praktikal, XML sering digunakan untuk fail konfigurasi dan pertukaran data untuk meningkatkan kecekapan pembangunan.

C# vs C: Memahami perbezaan dan persamaan utamaC# vs C: Memahami perbezaan dan persamaan utamaApr 20, 2025 am 12:03 AM

Perbezaan utama antara C# dan C ialah sintaks, prestasi dan senario aplikasi. 1) Sintaks C# lebih ringkas, menyokong pengumpulan sampah, dan sesuai untuk pembangunan rangka kerja .NET. 2) C mempunyai prestasi yang lebih tinggi dan memerlukan pengurusan memori manual, yang sering digunakan dalam pengaturcaraan sistem dan pembangunan permainan.

C# vs C: Sejarah, evolusi, dan prospek masa depanC# vs C: Sejarah, evolusi, dan prospek masa depanApr 19, 2025 am 12:07 AM

Sejarah dan evolusi C# dan C adalah unik, dan prospek masa depan juga berbeza. 1.C dicipta oleh BjarnestroustRup pada tahun 1983 untuk memperkenalkan pengaturcaraan berorientasikan objek ke dalam bahasa C. Proses evolusinya termasuk pelbagai standardisasi, seperti C 11 memperkenalkan kata kunci auto dan ekspresi Lambda, C 20 memperkenalkan konsep dan coroutin, dan akan memberi tumpuan kepada pengaturcaraan prestasi dan sistem pada masa akan datang. 2.C# telah dikeluarkan oleh Microsoft pada tahun 2000. Menggabungkan kelebihan C dan Java, evolusinya memberi tumpuan kepada kesederhanaan dan produktiviti. Sebagai contoh, C#2.0 memperkenalkan generik dan C#5.0 memperkenalkan pengaturcaraan tak segerak, yang akan memberi tumpuan kepada produktiviti pemaju dan pengkomputeran awan pada masa akan datang.

See all articles

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft