Jadual Kandungan
Brute force Approach
brute force approach
Ubah suai susulan sepunya terpanjang (LCS)
Rumah pembangunan bahagian belakang C++ Program C++ untuk mencari sama ada rentetan yang diberikan mempunyai urutan berulang dengan panjang 2 atau lebih

Program C++ untuk mencari sama ada rentetan yang diberikan mempunyai urutan berulang dengan panjang 2 atau lebih

Sep 17, 2023 pm 02:41 PM
c program Cari ulangi seterusnya

Program C++ untuk mencari sama ada rentetan yang diberikan mempunyai urutan berulang dengan panjang 2 atau lebih

Diberi rentetan, cari urutan panjang sekurang-kurangnya dua yang diulang dalam rentetan. Indeks nombor unsur berikutnya tidak boleh dalam susunan yang sama.

string s = "PNDPNSP";
print("Repeated subsequence of length 2 or more: ", (check(s) ? "Yes" : "No"));
Salin selepas log masuk

Mari lihat beberapa contoh di bawah untuk memahami cara pendekatan ini berfungsi dalam situasi yang berbeza -

Contoh 1 - str = "PNDPNSP"

Penjelasan − Di sini, jawapannya adalah benar kerana terdapat urutan berulang "PN" dalam rentetan.

Contoh 2 - str = "PPND"

Penjelasan - Di sini, jawapannya salah kerana tidak ada urutan panjang yang berulang sekurang-kurangnya dua dalam rentetan.

Contoh 3str = "PPNP"

Penjelasan - Di sini, jawapannya betul kerana "PP" indeks 0 dan 1 dan "PP" indeks 1 dan 3 wujud dan "PP" yang digunakan adalah dalam urutan mengikut Urutan mempunyai indeks yang berbeza. (indeks berasaskan 0)

Terjemahan bahasa Cina bagi

Brute force Approach

ialah:

brute force approach

Kaedah ini akan menjana semua kemungkinan urutan panjang 2 (panjang minimum) dan mencari jika kita telah melihat urutan ini dengan urutan yang ditemui. Jika susulan sudah wujud, kami mengembalikan benar dan menamatkan program jika tidak, selepas melengkapkan lelaran, jika kami tidak menemui apa-apa, kami mengembalikan palsu.

Dalam kes yang paling teruk, urutan ini mungkin tidak wujud dan kami akhirnya menjana semua hasil yang mungkin.

urutan dua panjang dan simpannya. Jadi dengan mengandaikan anda mencincang urutan yang dikira untuk mencapai sisipan dan carian O(1), ini menjadi O(n^2). Jumlah susulan juga adalah O(n^2), jadi ruang storan juga.

Ubah suai susulan sepunya terpanjang (LCS)

Algoritma #🎜🎜 #LCS mencari urutan sepunya terpanjang antara 2 rentetan. Ia adalah kaedah pengaturcaraan dinamik piawai yang menggunakan kaedah lelaran bagi matriks dua dimensi. Kerumitan masa ialah O(n^2). Kami hanya akan mencari rentetan yang diberikan itu sendiri dalam kaedah yang diubah suai. Namun begitu, kami juga akan menyemak sama ada indeks kedudukan semasa tidak sama.

Contoh

Lihat kod C++ di bawah untuk melaksanakan algoritma urutan lazim terpanjang yang diubah suai yang memudahkan kaedah kami mencari urutan berulang panjang 2 atau lebih -

#include <iostream>
using namespace std;
bool modifiedLongestCommonSubsequence(string s) {
   int n = s.length();
   int dp[n+1][n+1];
   for (int i=0; i<=n; i++)
      fill(dp[i], dp[i]+n+1, 0);
   for (int i=1; i<=n; i++) {
      for (int j=1; j<=n; j++) {
         if (s[i-1]==s[j-1] && i!=j) {
            dp[i][j] = 1 + dp[i-1][j-1];
         }
         else {
            dp[i][j] = max(dp[i][j-1], dp[i-1][j]);
         }
      }
   }
   if(dp[n][n] > 1) return true;
   return false;
}
int main() {
   string str = "PNDPNSP";
   cout << "Repeated subsequence of length 2 or more: " << (modifiedLongestCommonSubsequence(str) ? "Yes" : "No");
   return 0;
}
Salin selepas log masuk

Output

Repeated subsequence of length 2 or more: Yes
Salin selepas log masuk
Salin selepas log masuk

Sudah tentu, kerumitan masa dan ruang ialah O(n^2), tetapi daripada kaedah pertama, ia lebih elegan dan mudah untuk menghasilkan cincangan O(1).

Penyelesaian yang lebih baik

Dalam kaedah ini, kami akan cuba membuat beberapa pemerhatian berdasarkan kaedah sebelum ini.

Pemerhatian 1 − Jika watak muncul lebih daripada dua kali, jawapannya sentiasa benar. Jom tengok kenapa?

Contoh - Dalam rentetan str = "AVHJFBABVNHFA" kita mempunyai "AAA" dalam kedudukan 0, 6 dan 12. jadi Kita boleh mempunyai "AA" pada indeks 0 dan 6 sebagai susulan, dan "AA" pada indeks 6 dan 12 sebagai susulan sebagai yang lain.

Pemerhatian 2 - Jika aksara diulang sekali sahaja, ia tidak boleh menyumbang kepada keputusan kami berikutnya, kerana ia hanya akan tersedia dalam paling banyak satu urutan. ia tidak akan berfungsi Kerana kita memerlukan sekurang-kurangnya dua urutan. Jadi kita boleh mengalih keluar atau mengabaikan semua aksara berlaku pada masa yang sama.

Pemerhatian 3 − Jika rentetan ialah palindrom, dan dua pemerhatian pertama terpakai, maka jawapannya ialah Sentiasa palsu melainkan panjang rentetannya ganjil. Jom tengok kenapa?

Contoh - String str = "PNDDNP"

Penjelasan - Sekarang, watak-wataknya tidak teratur jadi kami tidak dapat mencari Susunan mempunyai susunan yang sama, jadi ini tidak mungkin.

Contoh

Berdasarkan ketiga-tiga pemerhatian di atas, kami membuat kesimpulan bahawa jika kami mengalih keluar semua aksara yang muncul sekali dalam rentetan dan kemudian menyemak sama ada aksara tertentu muncul lebih daripada dua kali atau jika rentetan itu bukan palindrom, maka jawapan Kami adalah betul . Mari lihat penyelesaian yang lebih baik yang dilaksanakan dalam C++ -

#include <iostream>
using namespace std;
bool isPalindrome(string s) {
   for(int i=0;i<s.size()/2;i++) {
      if(s[i]!=s[s.size()-1-i]) {
         return false;
      }
   }
   return true;
}
bool check(string s) {
   int hash[26] = {0};
   for (int i = 0; i < s.size(); i++) {
      hash[s[i]-'a']++;
      if (hash[s[i]-'a'] > 2) {
         return true;
      }
   }
   int k = 0;
   string mstr = "";
   for (int i = 0; i < s.size(); i++) {
      if (hash[s[i]-'a'] > 1) {
         mstr[k++] = s[i];
      }
   }
   if (isPalindrome(mstr)) {
      return false;
   }
   return true;
}
int main() {
   string s = "PNDPNSP";
   cout << "Repeated subsequence of length 2 or more: " << (check(s) ? "Yes" : "No");
   return 0;
}
Salin selepas log masuk

Output

Repeated subsequence of length 2 or more: Yes
Salin selepas log masuk
Salin selepas log masuk
KESIMPULAN

Kami membuat kesimpulan bahawa menggunakan pemerhatian dan cincang adalah cara terbaik untuk menyelesaikan masalah ini. Kerumitan masa ialah O(n). Kerumitan ruang juga mengikut urutan O(n), mencipta rentetan baharu dan cincangan 26 aksara yang berterusan.

Atas ialah kandungan terperinci Program C++ untuk mencari sama ada rentetan yang diberikan mempunyai urutan berulang dengan panjang 2 atau lebih. 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)

Bagaimana untuk mematikan Cari iPhone Saya Bagaimana untuk mematikan Cari iPhone Saya Nov 09, 2023 pm 02:21 PM

Apa yang berlaku apabila anda mematikan Cari Saya pada iPhone? Cari iPhone Saya membantu anda mencari peranti yang hilang atau dicuri. Apabila didayakan, Cari iPhone Saya membolehkan anda menjejak lokasi peranti anda pada peta, memainkan bunyi dan membantu anda mencari peranti anda. Cari Saya juga termasuk Kunci Pengaktifan untuk menghalang sesiapa daripada menggunakan iPhone anda. Apabila anda mematikan Cari iPhone Saya, anda kehilangan semua ciri ini, yang mungkin menyukarkan untuk memulihkan peranti Apple yang hilang. Walaupun Cari iPhone Saya sangat berguna, anda harus melumpuhkannya apabila anda ingin menjual, menderma, menukar telefon anda atau menghantarnya untuk penggantian bateri atau sebarang perkhidmatan lain. Melakukan ini akan memastikan tiada sesiapa boleh mengakses maklumat tentang anda

4 Cara untuk Mematikan Cari Saya pada iPhone 4 Cara untuk Mematikan Cari Saya pada iPhone Feb 02, 2024 pm 04:15 PM

Apl Cari Saya Apple membolehkan anda mencari iPhone anda atau peranti lain untuk mengelakkannya daripada hilang atau dilupakan. Walaupun Cari Saya ialah alat yang berguna untuk menjejak peranti, anda mungkin mahu melumpuhkannya jika anda bimbang tentang isu privasi, tidak mahu menghabiskan bateri anda atau atas sebab lain. Nasib baik, terdapat beberapa cara untuk mematikan Cari Saya pada iPhone, semuanya akan kami terangkan dalam artikel ini. Cara Mematikan Cari Saya pada iPhone [4 Kaedah] Anda boleh mematikan Cari Saya pada iPhone dalam empat cara. Jika anda menggunakan Kaedah 1 untuk mematikan Cari, anda boleh melakukan ini daripada peranti yang anda mahu nyahdayakannya. Untuk meneruskan kaedah 2, 3 dan 4, iPhone yang anda ingin matikan Finder harus dimatikan atau

Cari indeks unsur dalam tatasusunan menggunakan fungsi Array.IndexOf dalam C# Cari indeks unsur dalam tatasusunan menggunakan fungsi Array.IndexOf dalam C# Nov 18, 2023 am 09:59 AM

Gunakan fungsi Array.IndexOf dalam C# untuk mencari indeks elemen dalam tatasusunan Dalam program C#, apabila kita perlu mencari indeks elemen dalam tatasusunan, kita boleh menggunakan fungsi Array.IndexOf. Fungsi Array.IndexOf mencari elemen yang ditentukan dalam julat tatasusunan yang ditentukan dan mengembalikan indeks kejadian pertamanya. Jika elemen tidak dijumpai, -1 dikembalikan. Berikut ialah kod sampel yang menunjukkan cara menggunakan fungsi Array.IndexOf untuk mencari elemen dalam tatasusunan.

Bagaimana untuk menyemak nombor siri cakera keras dan alamat mac Bagaimana untuk menyemak nombor siri cakera keras dan alamat mac Feb 18, 2024 pm 07:45 PM

Nombor siri cakera keras dan alamat MAC adalah pengecam penting dalam perkakasan komputer dan sangat berguna dalam mengurus dan menyelenggara sistem komputer. Artikel ini akan memperkenalkan cara mencari nombor siri cakera keras dan alamat MAC. 1. Cari nombor siri cakera keras Nombor siri cakera keras ialah pengecam unik yang digunakan oleh pengeluar cakera keras untuk mengenal pasti dan menjejaki cakera keras. Dalam sistem pengendalian yang berbeza, kaedah mencari nombor siri cakera keras adalah sedikit berbeza. Windows: Buka Prompt Perintah (cari "cmd" dalam menu Mula) dan masukkan arahan berikut dan tekan Enter: wmicdisk

Fungsi glob() dalam PHP digunakan untuk mencari fail atau direktori Fungsi glob() dalam PHP digunakan untuk mencari fail atau direktori Nov 18, 2023 pm 06:17 PM

Fungsi glob() dalam PHP digunakan untuk mencari fail atau direktori dan merupakan fungsi operasi fail yang berkuasa. Ia boleh mengembalikan laluan fail atau direktori berdasarkan padanan corak yang ditentukan. Sintaks fungsi glob() adalah seperti berikut: glob(corak, bendera) dengan corak mewakili rentetan corak yang akan dipadankan, yang boleh menjadi ungkapan kad bebas, seperti *.txt (fail yang sepadan berakhir dengan .txt), atau laluan Fail tertentu. flags ialah parameter pilihan yang digunakan untuk mengawal fungsi

Program C++ untuk mencari nilai fungsi sinus hiperbolik songsang mengambil nilai yang diberikan sebagai hujah Program C++ untuk mencari nilai fungsi sinus hiperbolik songsang mengambil nilai yang diberikan sebagai hujah Sep 17, 2023 am 10:49 AM

Fungsi hiperbola ditakrifkan menggunakan hiperbola dan bukannya bulatan dan bersamaan dengan fungsi trigonometri biasa. Ia mengembalikan parameter nisbah dalam fungsi sinus hiperbolik dari sudut yang dibekalkan dalam radian. Tetapi lakukan sebaliknya, atau dengan kata lain. Jika kita ingin mengira sudut daripada sinus hiperbolik, kita memerlukan operasi trigonometri hiperbolik songsang seperti operasi sinus songsang hiperbolik. Kursus ini akan menunjukkan cara menggunakan fungsi sinus songsang hiperbolik (asinh) dalam C++ untuk mengira sudut menggunakan nilai sinus hiperbolik dalam radian. Operasi arcsine hiperbolik mengikut formula berikut -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}, Di mana\:In\:is\:logaritma asli\:(log_e\:k)

Program C++ untuk mencetak kamus Program C++ untuk mencetak kamus Sep 11, 2023 am 10:33 AM

Peta ialah sejenis bekas khas dalam C++ di mana setiap elemen adalah sepasang dua nilai, iaitu nilai kunci dan nilai dipetakan. Nilai kunci digunakan untuk mengindeks setiap item, dan nilai yang dipetakan ialah nilai yang dikaitkan dengan kunci. Tidak kira sama ada nilai yang dipetakan adalah unik, kuncinya sentiasa unik. Untuk mencetak elemen peta dalam C++ kita perlu menggunakan iterator. Elemen dalam set item ditunjukkan oleh objek iterator. Iterator digunakan terutamanya dengan tatasusunan dan jenis bekas lain (seperti vektor), dan mereka mempunyai set operasi khusus yang boleh digunakan untuk mengenal pasti elemen tertentu dalam julat tertentu. Iterator boleh dinaikkan atau dikurangkan untuk merujuk elemen berbeza yang terdapat dalam julat atau bekas. Peulang menunjuk ke lokasi memori elemen tertentu dalam julat. Mencetak peta dalam C++ menggunakan iterator Mula-mula, mari lihat cara untuk mentakrifkan

Program C menggunakan fungsi rename() untuk menukar nama fail Program C menggunakan fungsi rename() untuk menukar nama fail Sep 21, 2023 pm 10:01 PM

Fungsi nama semula menukar fail atau direktori daripada nama lamanya kepada nama baharunya. Operasi ini serupa dengan operasi bergerak. Jadi kita juga boleh menggunakan fungsi nama semula ini untuk memindahkan fail. Fungsi ini wujud dalam fail pengepala perpustakaan stdio.h. Sintaks fungsi nama semula adalah seperti berikut: intrename(constchar*oldname,constchar*newname); Fungsi rename() fungsi menerima dua parameter. Satu nama lama dan satu lagi nama baru. Kedua-dua parameter adalah penunjuk kepada aksara malar yang mentakrifkan nama lama dan baharu fail. Mengembalikan sifar jika fail berjaya dinamakan semula, jika tidak, mengembalikan integer bukan sifar. Semasa operasi menamakan semula

See all articles