Jadual Kandungan
Pernyataan Masalah
Contoh Contoh
Masuk
Output
Penjelasan
Kaedah 2
Algoritma
Contoh
Kesimpulan
Rumah pembangunan bahagian belakang C++ Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari

Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari

Sep 02, 2023 pm 08:09 PM
rentetan binari pertukaran tali palindrom

Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari

Pernyataan Masalah

Kami mempunyai rentetan str dan rentetan binari B. Panjang kedua-dua rentetan adalah sama dengan N. Kita perlu menyemak sama ada kita boleh membuat rentetan str rentetan palindrom dengan menukar aksaranya beberapa kali pada mana-mana pasangan indeks yang mengandungi aksara tidak sama dalam rentetan B.

Contoh Contoh

Masuk

str = ‘AAS’ B = ‘101’
Salin selepas log masuk

Output

‘YES’
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Kita boleh menukar str[1] dan str[2] kerana B[1] dan B[2] adalah tidak sama. Rentetan akhir boleh menjadi 'ASA'.

Masuk

str = ‘AASS’ B = ‘1111’
Salin selepas log masuk

Output

‘No’
Salin selepas log masuk
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Kami tidak boleh membuat string palindrom kerana rentetan B tidak mengandungi aksara yang tidak sama rata.

Masuk

str = ‘AASSBV’ B = ‘111100’
Salin selepas log masuk

Output

‘No’
Salin selepas log masuk
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Kami tidak boleh menjadikan rentetan str sebagai palindrom kerana ketidakpadanan kekerapan aksara.

Kaedah 1

Dalam kaedah pertama kami akan menyemak sama ada sebarang rentetan palindrom boleh dibuat menggunakan semua aksara rentetan str. Jika ya, kita boleh menyemak sama ada kita boleh menukar aksara dalam pasangan indeks yang mengandungi aksara tidak sama dalam rentetan B dan menjadikan rentetan itu sebagai palindrom. Jika tidak, kami kembali palsu.

Algoritma

  • Langkah 1 - Laksanakan fungsi utiliti() dan tukar aksara mengikut syarat yang diberikan untuk menentukan sama ada rentetan itu boleh menjadi palindrom dengan menukar aksara.

  • Langkah 2 - Tentukan fungsi canBePalindromic() untuk menyemak sama ada kita boleh membina sebarang rentetan palindrom menggunakan aksara str.

  • Langkah 2.1 − Buat peta yang menyimpan setiap aksara dalam rentetan str dan kekerapannya. Gunakan gelung for untuk melelaran melalui rentetan dan mengira kekerapan aksara.

  • Langkah 2.2 - Kira bilangan aksara dengan frekuensi genap dan ganjil.

  • Langkah 2.3 - Gunakan set untuk mendapatkan jumlah bilangan aksara unik dalam rentetan.

  • Langkah 2.4 − Kembalikan benar jika panjang rentetan adalah ganjil dan mengandungi hanya satu aksara dengan kekerapan ganjil.

  • Langkah 2.5 − Jika panjang rentetan genap, maka semua aksara dengan kekerapan genap dan 0 aksara dengan kekerapan ganjil, kembali benar.

  • Langkah 2.6 − Kembalikan palsu.

  • Langkah 3 - Jika rentetan itu tidak boleh menjadi palindrom, kembalikan palsu.

  • Langkah 4 - Jika rentetan B mengandungi berbilang '1' dan '0', kembalikan benar;

Contoh

#include <bits/stdc++.h>
using namespace std;
// function to check if the string can be palindromic
bool canBePalindromic(string str){
   //Creating the map to store the frequency of each character
   map<char, int> charMap;
   // store the frequency of each character of string Str
   for (int i = 0; i < str.length(); i++) {
      charMap[str[i]] += 1;
   }
   // to store the count of even and odd frequent characters
   int even = 0, odd = 0;
   // iterate through the map
   for (auto e : charMap)  {
      //If frequency is odd, increment odd count; else, increment even count
      if (e.second % 2 == 1) {
         odd++;
      } else {
         even++;
      }
   }
   // set to store unique characters of string Str
   unordered_set<char> set;
   //Insert all characters of string Str in set
   for (int i = 0; i < str.size(); i++){
      set.insert(str[i]);
   }
   // if the string length is odd and only one character has an odd frequency, return true
   if (str.size() % 2 == 1 && even == set.size() - 1 && odd == 1){
      return true;
   }
   // If the string length is even and all characters have even frequency, return true
   if (str.size() % 2 == 0 && even == set.size() && odd == 0){
      return true;
   }
   // else return false
   return false;
}
// function to check if the string can be palindromic by swapping characters according to string B
bool utility(string S, string B){
   // If string S cannot be palindromic, return false.
   if (canBePalindromic(S) == false){
      return false;
   } else{
      // if at least one '1' and '0' is present in string B, string S can be palindromic
      int one = 0, zero = 0;
      for (int i = 0; i < B.size(); i++) {
         // If the current character is '0.'
         if (B[i] == '0'){
            zero++;
         } else {
            one++;
         }
      }
      // return true if at least one '1' and '0' is present in the string B
      if (one >= 1 && zero >= 1){
         return true;
      } else {
         return false;
      }
   }
}
int main(){
   string S = "NANA";
   string B = "0001";
   bool result = utility(S, B);
   if (result)
      cout << "Yes";
   else
      cout << "No";
   return 0;
}
Salin selepas log masuk

Output

Yes
Salin selepas log masuk
Salin selepas log masuk
  • Kerumitan masa - O(NlogN), kerana kami menggunakan gelung for untuk melintasi rentetan, dan kaedah insert() set mengambil masa (logN).

  • Kerumitan Ruang - O(K), dengan K ialah jumlah bilangan aksara unik.

Kaedah 2

Dalam kaedah ini, daripada menggunakan peta, kami akan menggunakan tatasusunan untuk menyimpan kekerapan aksara.

Algoritma

  • Langkah 1 - Buat tatasusunan 'charFrequancy' dengan panjang 26 dan mulakannya kepada sifar.

  • Langkah 2 - Kira jumlah bilangan 1 dan 0 dalam rentetan B.

  • Langkah 3 - Kemas kini kekerapan setiap aksara dalam tatasusunan.

  • Langkah 4 - Jika panjang rentetan genap dan frekuensi ganjil bukan sifar, kembalikan palsu.

  • Langkah 5 - Jika panjang rentetan ganjil dan frekuensi ganjil lebih besar daripada 1, kembalikan palsu.

  • Langkah 6 - Kembalikan benar jika kedua-dua 1 dan 0 wujud dalam rentetan.

  • Langkah 7 - Kembalikan palsu.

Contoh

#include <bits/stdc++.h>
using namespace std;
// function to check if the given string can be converted to a palindrome
bool utility(string str, string B){
   // array to store character counts in str
   int charFrequancy[26] = {0};
   int ones = 0, zeros = 0, odd_fre = 0;
   // count ones and zeros
   for (char ch : B) {
      if (ch == '1')
         ones++;
      if (ch == '0')
         zeros++;
   }
   // store counts of characters
   for (char ch : str){
      charFrequancy[ch - 'A']++;
   }
   // check total character with odd frequency
   for (int i = 0; i < 26; i++){
      if (charFrequancy[i] % 2 == 1)
         odd_fre++;
   }
   if (str.length() % 2 == 0 && odd_fre != 0)
      return false;
   if (str.length() % 2 == 1 && odd_fre > 1)
      return false;
   if (ones > 0 && zeros > 0)
      return true;
   return false;
}
int main(){
   string S = "NBCNB";
   string B = "01010";
   if (utility(S, B)){
      cout << "Yes";
   } else {
      cout << "No";
   }
   return 0;
}
Salin selepas log masuk

Output

Yes
Salin selepas log masuk
Salin selepas log masuk
  • Kerumitan masa - O(N) kerana kami menggunakan gelung for untuk mengulangi rentetan.

  • Kerumitan ruang − O(1) kerana kami sentiasa menggunakan tatasusunan panjang 26.

Kesimpulan

Kami mempelajari dua kaedah untuk menyemak sama ada rentetan boleh menjadi palindrom dengan menukar aksara berdasarkan syarat tertentu. Kaedah pertama menggunakan koleksi dan peta, manakala kaedah kedua hanya menggunakan tatasusunan untuk menyimpan data. Kaedah kedua adalah lebih baik daripada kaedah pertama kerana kaedah insert() mengambil masa O(logn) untuk memasukkan data ke dalam koleksi, manakala tatasusunan hanya mengambil masa O(1).

Atas ialah kandungan terperinci Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari. 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.

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 menambah ruang swap pada Ubuntu 22.04 LTS Bagaimana untuk menambah ruang swap pada Ubuntu 22.04 LTS Feb 20, 2024 am 11:12 AM

Ruang swap memainkan peranan penting dalam sistem Linux, terutamanya apabila sistem kekurangan ingatan. Ia bertindak sebagai ruang storan memori sandaran yang membantu sistem berjalan dengan lancar dan mengekalkan kestabilan walaupun di bawah beban yang tinggi. Artikel ini memberi anda panduan terperinci untuk menambah ruang swap pada Ubuntu 22.04LTS untuk memastikan prestasi sistem anda dioptimumkan dan boleh mengendalikan pelbagai beban kerja. Memahami Ruang Swap Space Swap menyediakan memori maya yang digunakan untuk menambah RAM fizikal sistem. Apabila sistem kekurangan RAM, kernel menukar data ke cakera untuk mengelakkan kehabisan memori dan sistem ranap. Sistem Linux biasanya menggunakan ruang swap untuk mengendalikan situasi ini. Jalankan berbilang aplikasi intensif memori secara serentak untuk memproses fail atau data yang sangat besar

Program Python: Tukar kedudukan elemen pertama dan terakhir dalam matriks antara lajur Program Python: Tukar kedudukan elemen pertama dan terakhir dalam matriks antara lajur Sep 08, 2023 pm 04:29 PM

Matriks ialah susunan nombor dua dimensi yang disusun dalam baris dan lajur. Python tidak mempunyai sebarang jenis data untuk mewakili matriks, tetapi kita boleh menggunakan senarai bersarang atau tatasusunan NumPy sebagai matriks. Lihat senario input dan output berikut untuk melihat cara menukar elemen lajur pertama dan terakhir matriks. Senario Input-Output Katakan kita mempunyai matriks 3X3 yang diwakili menggunakan senarai senarai. Matriks keluaran akan menjadi matriks yang terhasil daripada menukar elemen lajur pertama dan terakhir. Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]Mari kita pertimbangkan yang lain Matriks yang baris dan lajurnya tidak sama. Inputmatriks:

Urutan tidak bertambah terpanjang dalam rentetan binari Urutan tidak bertambah terpanjang dalam rentetan binari Sep 07, 2023 pm 11:13 PM

Dalam masalah ini, kita perlu mencari urutan tidak bertambah terpanjang bagi rentetan yang diberikan. Tidak bertambah bermakna aksara sama ada sama atau dalam susunan menurun. Memandangkan rentetan binari hanya mengandungi "0" dan "1", rentetan yang terhasil hendaklah sama ada bermula dengan "1" dan berakhir dengan "0", atau bermula dan berakhir dengan "0" atau "1". Untuk menyelesaikan masalah ini, kami akan mengira awalan "1" dan akhiran "0" pada setiap kedudukan rentetan dan mencari jumlah maksimum awalan "1" dan akhiran "0". Pernyataan Masalah - Kami diberi rentetan binari str. Kita perlu mencari urutan tidak bertambah terpanjang daripada rentetan yang diberikan. Contoh Input–str="010100"Output–4 menggambarkan bukan rekursif terpanjang

Ditulis dalam C++, cari bilangan pilih atur unik rentetan binari bermula dengan 1 Ditulis dalam C++, cari bilangan pilih atur unik rentetan binari bermula dengan 1 Sep 05, 2023 am 09:01 AM

Dalam masalah yang diberikan, kita diberi rentetan yang terdiri daripada 0 dan 1 kita perlu mencari jumlah bilangan semua pilih atur bermula dengan 1. Oleh kerana jawapannya mungkin jumlah yang besar, kami mengambilnya modulo 1000000007 dan mengeluarkannya. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Kami akan menyelesaikan masalah ini dengan menggunakan beberapa matematik gabungan dan menyediakan beberapa formula. Kaedah Penyelesaian Dalam kaedah ini kita akan mengira bilangan 0 dan 1. Sekarang andaikan n ialah nombor 1 yang muncul dalam rentetan kami dan m ialah bilangan 0 yang muncul dalam rentetan kami

Dalam PHP, fungsi fungsi pack() adalah untuk menukar data kepada rentetan binari Dalam PHP, fungsi fungsi pack() adalah untuk menukar data kepada rentetan binari Aug 31, 2023 pm 02:05 PM

Fungsi pack() mengemas data ke dalam rentetan binari. Pek sintaks(format,args) Format parameter - format untuk digunakan. Berikut ialah nilai yang mungkin - a - rentetan berlapik NUL A - rentetan empuk ruang h - rentetan perenambelasan, nibble rendah dahulu H - rentetan perenambelasan, nibble tinggi dahulu c - char C yang ditandatangani - char s yang tidak ditandatangani - ditandatangani pendek (sentiasa 16 bit , pesanan bait mesin) S - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait mesin) n - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian besar) v - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian kecil) i - integer bertanda (bergantung pada saiz mesin dan susunan bait) I - Tiada integer yang ditandatangani (bergantung pada

Program C++ untuk mencari bilangan matriks unik yang boleh dijana dengan menukar baris dan lajur Program C++ untuk mencari bilangan matriks unik yang boleh dijana dengan menukar baris dan lajur Sep 01, 2023 am 11:53 AM

Katakan kita mempunyai matriks nxn. Setiap elemen dalam matriks adalah unik dan integer antara 1 dan n2. Sekarang kita boleh melakukan operasi berikut dalam sebarang nombor dan dalam sebarang susunan. Kami memilih mana-mana dua integer x dan y dalam matriks, di mana (1≤x

Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari Sep 02, 2023 pm 08:09 PM

Pernyataan Masalah Kami mempunyai rentetan str dan rentetan binari B. Panjang kedua-dua rentetan adalah sama dengan N. Kita perlu menyemak sama ada kita boleh membuat rentetan str rentetan palindrom dengan menukar aksaranya beberapa kali pada mana-mana pasangan indeks yang mengandungi aksara tidak sama dalam rentetan B. Contoh Contoh Input str='AAS' B='101' Output 'YA' Terjemahan Cina bagi Penjelasan ialah: Penjelasan Kita boleh menukar str[1] dan str[2] kerana B[1] dan B[2] tidak sama . Rentetan akhir boleh menjadi 'ASA'. Input str=‘AASS’ B=‘1111’ dan keluaran ‘No’ Terjemahan Bahasa Cina bagi Explanation ialah: Penjelasan bahawa kita tidak boleh membuat string palindrom,

Hitung rentetan perduaan panjang N yang merupakan gabungan berulang subrentetan Hitung rentetan perduaan panjang N yang merupakan gabungan berulang subrentetan Sep 07, 2023 am 10:13 AM

Tujuan artikel ini adalah untuk melaksanakan program untuk mengira bilangan rentetan binari panjang N yang dibentuk oleh penggabungan berulang subrentetan. Matlamatnya adalah untuk menentukan bilangan rentetan perduaan panjang N boleh dicipta dengan berulang kali menggabungkan subrentetan individu bagi teks yang diberikan, dengan N ialah integer positif. Pernyataan Masalah Laksanakan atur cara yang mengira bilangan rentetan binari panjang N yang menggabungkan subrentetan berulang kali. Contoh Contoh 1 Letus mengambil Input, N = 3 Output: 2 Terjemahan Cina bagi Penjelasan ialah: Penjelasan Berikut menyenaraikan rentetan binari yang boleh dilaksanakan dengan panjang N = 3, di mana subrentetan berulang kali digabungkan. "000":Thesubstr

See all articles