Jadual Kandungan
Pernyataan Masalah
Kaedah naif
Algoritma (naif)
Kod C++ (biasa)
Contoh
Output
Kaedah yang cekap
Algoritma (cekap)
Kod C++ (cekap)
Kesimpulan
Rumah pembangunan bahagian belakang C++ Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan

Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan

Aug 25, 2023 pm 02:41 PM
Pemisahan rentetan Semua watak muncul panjang maksimum

Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan

Dalam artikel ini, kami akan meneroka masalah cara mencari panjang partition memaksimumkan rentetan dengan aksara unik. Kami mula-mula memahami penyataan masalah dan kemudian mengkaji kaedah naif dan cekap untuk menyelesaikan masalah ini, termasuk algoritma dan kerumitan masa masing-masing. Akhirnya, kami akan melaksanakan penyelesaian dalam C++.

Pernyataan Masalah

Diberi rentetan, pisahkan rentetan kepada seberapa banyak subrentetan yang mungkin supaya setiap aksara dalam rentetan itu muncul dalam satu subrentetan sahaja. Mengembalikan panjang pemisahan memaksimumkan ini.

Kaedah naif

Pendekatan naif adalah untuk mengulang melalui rentetan, merekodkan kejadian terakhir setiap aksara. Kemudian, ulangi rentetan sekali lagi dan buat partition apabila kejadian terakhir aksara semasa ditemui.

Algoritma (naif)

  • Memulakan tatasusunan untuk menyimpan kejadian terakhir setiap aksara dalam rentetan.

  • Gelung melalui rentetan dan rekod kejadian terakhir setiap aksara.

  • Memulakan vektor untuk menyimpan panjang partition.

  • Gelung melalui rentetan sekali lagi dan buat partition apabila kejadian terakhir aksara semasa ditemui.

Kod C++ (biasa)

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<int> partitionLengths(std::string s) {
   std::vector<int> lastOccurrence(26, -1);
   
   for (size_t i = 0; i < s.size(); i++) {
      lastOccurrence[s[i] - 'a'] = i;
   }
   
   std::vector<int> partitionLengths;
   int start = 0, end = 0;
   
   for (size_t i = 0; i < s.size(); i++) {
      end = std::max(end, lastOccurrence[s[i] - 'a']);
      if (i == end) {
         partitionLengths.push_back(end - start + 1);
         start = i + 1;
      }
   }
   
   return partitionLengths;
}

int main() {
   std::string s = "abacdc";
   std::vector<int> lengths = partitionLengths(s);
   
   std::cout << "Lengths of maximized partitions: ";
   for (int length : lengths) {
      std::cout << length << " ";
   }
   
   return 0;
}
Salin selepas log masuk

Output

Lengths of maximized partitions: 3 3 
Salin selepas log masuk
Salin selepas log masuk

Kerumitan masa (algoritma naif) - O(n), dengan n ialah panjang rentetan.

Kaedah yang cekap

Kaedah yang cekap adalah serupa dengan kaedah yang mudah, tetapi bukannya mengulangi rentetan dua kali, kami boleh mencipta partition sambil merakam kejadian terakhir setiap aksara dalam satu lelaran.

Algoritma (cekap)

  • Memulakan tatasusunan untuk menyimpan kejadian terakhir setiap aksara dalam rentetan.

  • Mulakan vektor untuk menyimpan panjang partition.

  • Gelung melalui rentetan, rekod kejadian terakhir setiap aksara dan buat partition apabila kejadian terakhir aksara semasa ditemui.

Kod C++ (cekap)

Contoh

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<int> partitionLengths(std::string s) {
   std::vector<int> lastOccurrence(26, -1);
   std::vector<int> partitionLengths;
   int start = 0, end = 0;
   
   for (size_t i = 0; i < s.size(); i++) {
      lastOccurrence[s[i] - 'a'] = i;
   }
   
   for (size_t i = 0; i < s.size(); i++) {
      end = std::max(end, lastOccurrence[s[i] - 'a']);
   
      if (i == end) {
         partitionLengths.push_back(end - start + 1);
         start = i + 1;
      }
   }
   
   return partitionLengths;
}

int main() {
   std::string s = "abacdc";
   std::vector<int> lengths = partitionLengths(s);
   
   std::cout << "Lengths of maximized partitions: ";
   for (int length : lengths) {
      std::cout << length << " ";
   }
   
   return 0;
}
Salin selepas log masuk

Output

Lengths of maximized partitions: 3 3 
Salin selepas log masuk
Salin selepas log masuk

Kerumitan masa (cekap) - O(n), dengan n ialah panjang rentetan.

Kesimpulan

Dalam artikel ini, kami meneroka masalah memaksimumkan panjang partition untuk mencari rentetan dengan aksara unik. Kami membincangkan kaedah yang mudah tetapi cekap untuk menyelesaikan masalah ini, bersama-sama dengan kerumitan algoritma dan masa mereka. Pendekatan cekap ini menggabungkan rakaman kejadian terakhir bagi setiap aksara dan mencipta sekatan dalam satu lelaran, memberikan penyelesaian yang dioptimumkan. Kedua-dua kaedah mempunyai kerumitan masa yang sama, tetapi kaedah yang cekap menggunakan lebih sedikit lelaran.

Atas ialah kandungan terperinci Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan. 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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu 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)

Cara menggunakan fungsi split() dalam Python 3.x untuk membelah rentetan mengikut pembatas yang ditentukan Cara menggunakan fungsi split() dalam Python 3.x untuk membelah rentetan mengikut pembatas yang ditentukan Jul 31, 2023 pm 08:33 PM

Python ialah bahasa pengaturcaraan popular yang menyediakan banyak fungsi terbina dalam untuk mengendalikan rentetan. Salah satu fungsi yang biasa digunakan ialah fungsi split(), yang boleh memisahkan rentetan kepada berbilang subrentetan mengikut pembatas yang ditentukan. Artikel ini akan memperkenalkan cara menggunakan fungsi split() dalam Python3.x. Dalam Python, fungsi split() ialah fungsi terbina dalam kelas rentetan Sintaks asasnya adalah seperti berikut: string.split(separator,maxsplit)

Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan Panjang pisah maksimum rentetan supaya setiap aksara dalam rentetan muncul dalam subrentetan Aug 25, 2023 pm 02:41 PM

Dalam artikel ini, kami akan meneroka masalah bagaimana untuk mencari panjang partition memaksimumkan rentetan dengan aksara unik. Kami mula-mula memahami penyataan masalah dan kemudian mengkaji kaedah naif dan cekap untuk menyelesaikan masalah ini, termasuk algoritma dan kerumitan masa masing-masing. Akhirnya, kami akan melaksanakan penyelesaian dalam C++. Pernyataan Masalah Diberi rentetan, bahagikan rentetan itu kepada seberapa banyak subrentetan yang mungkin supaya setiap aksara dalam rentetan muncul dalam satu subrentetan sahaja. Mengembalikan panjang pemisahan memaksimumkan ini. Pendekatan naif Pendekatan naif adalah untuk mengulang melalui rentetan, merekodkan kejadian terakhir setiap aksara. Kemudian, ulangi rentetan sekali lagi dan buat partition apabila kejadian terakhir aksara semasa ditemui. Algoritma (naif) untuk memulakan tatasusunan untuk menyimpan rentetan

Bagaimana untuk memisahkan rentetan kepada tatasusunan dalam PHP Bagaimana untuk memisahkan rentetan kepada tatasusunan dalam PHP Jul 08, 2023 pm 01:49 PM

Cara Membahagikan Rentetan kepada Array dalam PHP Dalam PHP, kita selalunya perlu memproses rentetan dan membahagikannya kepada beberapa bahagian. Memisahkan rentetan kepada tatasusunan ialah operasi biasa yang membantu kami mengendalikan pelbagai bahagian rentetan dengan lebih baik. Dalam artikel ini, kita akan belajar cara membahagikan rentetan kepada tatasusunan menggunakan fungsi dalam PHP dan menyediakan beberapa contoh kod. Gunakan fungsi explode untuk memisahkan rentetan kepada tatasusunan PHP menyediakan fungsi yang dipanggil explode, yang boleh memisahkan rentetan mengikut pembatas yang ditentukan.

Cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP Cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP Jun 26, 2023 pm 12:03 PM

Dalam bahasa PHP, terdapat banyak fungsi asas yang boleh membantu kami memproses rentetan dengan cepat dan cekap. Antaranya, fungsi letupan adalah fungsi pemisahan rentetan yang sangat praktikal. Ia boleh memisahkan rentetan kepada tatasusunan mengikut pembatas yang ditentukan, dan kemudian melakukan operasi rentetan yang lebih fleksibel. Dalam artikel ini, kami akan memperkenalkan cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP. 1. Format fungsi explode Format fungsi explode dalam bahasa PHP adalah seperti berikut: explode(separa

Kira bilangan cara untuk membelah rentetan kepada subrentetan K bermula dengan nombor genap dan mempunyai panjang minimum M Kira bilangan cara untuk membelah rentetan kepada subrentetan K bermula dengan nombor genap dan mempunyai panjang minimum M Sep 09, 2023 pm 02:01 PM

Dalam masalah ini, kita akan mengira cara untuk membahagikan rentetan yang diberikan kepada substring K supaya ia memenuhi syarat yang diberikan dalam pernyataan masalah. Kami akan menggunakan rekursi untuk menyelesaikan masalah ini. Selain itu, kami akan menggunakan kaedah pengaturcaraan dinamik jadual untuk menyelesaikan masalah ini dengan cekap. Pernyataan Masalah − Kami mempunyai rentetan panjang tertentu yang dipanggil bin_Str. Rentetan mengandungi hanya aksara angka dari '0' hingga '9'. Kita perlu mengira bilangan cara untuk membahagikan rentetan kepada subrentetan K supaya ia memenuhi syarat berikut. Subrentetan hendaklah mengandungi sekurang-kurangnya 2 aksara. Aksara pertama setiap subrentetan hendaklah genap dan aksara terakhir hendaklah ganjil. ContohContoh inputM=2,K=2;bin_str="255687&q

Contoh fungsi rentetan PHP: pemisahan rentetan Contoh fungsi rentetan PHP: pemisahan rentetan Jun 20, 2023 pm 01:58 PM

Terdapat banyak fungsi rentetan dalam PHP, antaranya fungsi pemisahan rentetan sangat biasa digunakan. Fungsi pemisahan rentetan boleh membelah rentetan mengikut pembatas yang ditentukan dan mengembalikan tatasusunan. Di bawah ini kami akan memperkenalkan beberapa fungsi pemisahan rentetan yang biasa digunakan. fungsi explode Fungsi explode boleh memisahkan rentetan mengikut pembatas yang ditentukan dan mengembalikan tatasusunan. Sintaksnya adalah seperti berikut: explode(string$separator,string$string

Bagaimana untuk menyelesaikan ralat yang dilaporkan oleh fungsi letupan dalam PHP Bagaimana untuk menyelesaikan ralat yang dilaporkan oleh fungsi letupan dalam PHP Mar 11, 2024 am 11:45 AM

Kaedah untuk menyelesaikan ralat yang dilaporkan oleh fungsi explode dalam PHP memerlukan contoh kod tertentu Dalam PHP, fungsi explode ialah fungsi yang digunakan untuk memisahkan rentetan kepada tatasusunan mengikut pembatas yang ditentukan. Walau bagaimanapun, kadangkala ralat berlaku apabila menggunakan fungsi letupan, terutamanya kerana parameter yang diluluskan tidak memenuhi keperluan fungsi tersebut. Di bawah ini kami akan membincangkan kemungkinan masalah dan penyelesaian secara terperinci, dan memberikan contoh kod khusus. Ralat disebabkan oleh bilangan parameter yang salah apabila menggunakan fungsi letupan

Menyemak sama ada rentetan boleh dipecahkan kepada tiga subrentetan, di mana satu subrentetan ialah subrentetan daripada dua subrentetan yang lain Menyemak sama ada rentetan boleh dipecahkan kepada tiga subrentetan, di mana satu subrentetan ialah subrentetan daripada dua subrentetan yang lain Sep 22, 2023 am 11:53 AM

Dalam masalah ini, kita perlu membahagikan rentetan yang diberikan supaya subrentetan ketiga boleh menjadi subrentetan daripada dua subrentetan pertama. Mari kita fikirkan penyelesaiannya. Rentetan ketiga boleh menjadi subrentetan daripada dua rentetan pertama hanya jika dua rentetan pertama mengandungi semua aksara rentetan ketiga. Jadi, kita perlu mencari sekurang-kurangnya satu aksara dengan kekerapan lebih daripada 3 dalam rentetan yang diberikan, dan kita boleh mengambil subrentetan ketiga bagi aksara tunggal itu. Pernyataan Masalah - Kami diberi rentetan str yang mengandungi N aksara abjad huruf kecil. Kita perlu menyemak sama ada kita boleh membahagikan rentetan kepada tiga subrentetan a, b dan c supaya subrentetan c ialah subrentetan a dan b. Bergantung pada sama ada 3 subrentetan boleh ditemui, cetak "ya" atau "tidak"

See all articles