Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Buat rentetan bukan palindrom dengan memasukkan aksara yang diberikan

Buat rentetan bukan palindrom dengan memasukkan aksara yang diberikan

WBOY
WBOYke hadapan
2023-09-23 23:05:031090semak imbas

Buat rentetan bukan palindrom dengan memasukkan aksara yang diberikan

Pernyataan Masalah

Kami diberi string str dan aksara c dalam input. Kita perlu memasukkan aksara yang diberikan c ke dalam rentetan pada indeks untuk menukar rentetan itu kepada bukan palindrom. Jika kita tidak boleh menukar rentetan kepada bukan palindrom, cetak "-1".

Contoh

Masuk

str = ‘nayan’, c = ‘n’

Output

‘nnayan’
Terjemahan

Penjelasan

ialah:

Penjelasan

Boleh terdapat berbilang rentetan keluaran kerana kita boleh memasukkan 'n' pada mana-mana indeks rentetan yang diberikan. Oleh itu, rentetan output boleh menjadi "nnayan", "nanyan", "naynan", "nayann", dll.

Masuk

str = ‘sss’, c = ‘s’

Output

‘-1’
Terjemahan

Penjelasan

ialah:

Penjelasan

Tidak kira di mana kita memasukkan "s" dalam rentetan yang diberikan, ia sentiasa palindrom.

Masuk

str = ‘tutorialspoint’, c = ‘p’

Output

‘ptutorialspoint’
Terjemahan

Penjelasan

ialah:

Penjelasan

Memandangkan str sudah pun bukan palindrom, ia mencetak rentetan yang sama dengan memasukkan aksara c pada indeks pertama.

Logik untuk menyelesaikan masalah di atas ialah jika semua aksara dalam rentetan tertentu adalah sama dengan aksara c yang diberikan, ia tidak boleh menjadikannya palindrom. Jika tidak, tambahkan aksara pada kedudukan pertama dan semak sama ada rentetan yang terhasil ialah palindrom. Jika ya, masukkan aksara yang diberikan pada penghujungnya.

Kaedah 1

Dalam kaedah ini, kami menggunakan gelung while untuk menyemak sama ada rentetan yang diberikan ialah palindrom dan gelung untuk menyemak sama ada semua aksara dalam rentetan yang diberikan adalah sama.

Algoritma

  • Langkah 1 - Mulakan pembolehubah "cnt" untuk menyimpan kiraan aksara yang sama dengan aksara yang diberikan c.

  • Langkah 2 - Gunakan gelung for untuk mengulangi rentetan. Jika aksara pada indeks i dalam rentetan adalah sama dengan aksara c, tambahkan 1 pada nilai "cnt".

  • Langkah 3 - Jika nilai 'cnt' sama dengan panjang rentetan, cetak '-1' dan laksanakan penyataan pulangan.

  • Langkah 4 − Mulakan pembolehubah 'temp' menggunakan c + str. Selepas itu, gunakan fungsi isPalindrome() untuk menyemak sama ada rentetan yang diberikan ialah palindrom.

  • Langkah 5 - Tentukan fungsi isPalindrome().

  • Langkah 5.1 - Takrifkan pembolehubah 'kiri' dan mulakannya kepada 0. Juga, tentukan pembolehubah 'kanan' dan mulakan ia kepada panjang rentetan tolak 1.

  • Langkah 5.2 - Gunakan gelung sementara dan padankan aksara pada permulaan dan penghujung rentetan. Selain itu, tingkatkan nilai pembolehubah "kiri" dan kurangkan nilai pembolehubah "kanan".

  • Langkah 5.3 - Jika sebarang ketidakpadanan ditemui, kembalikan palsu jika tidak, kembalikan benar apabila semua lelaran gelung selesai.

  • Langkah 6 - Jika nilai pembolehubah "temp" bukan palindrom, cetak jika tidak, cetak str + c.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
// Function to check if a string is a palindrome
bool isPalindrome(string str) {
   int left = 0;
   int right = str.length() - 1;
   // Keep comparing characters while they are the same
   while (right > left) {
      if (str[left++] != str[right--]) {
         return false;
      }
   }
   return true;
}
// Function to make a string non-palindrome by adding a character
void makeNonPalindrome(string str, char c) {
   int cnt = 0;
   for (int i = 0; i < str.length(); i++) {
      if (str[i] == c) {
         cnt++;
      }
   }
   if (cnt == str.length()) {
      cout << "-1";
      cout << "We can convert the string into a non-palindromic string by adding a given character at any position.";
      return;
   }
   cout << "Non-palindromic string is: " << endl;
   // append the character at the start, and check if it is a palindrome
   string temp = c + str;
   if (!isPalindrome(temp)){
      cout << temp << endl;
   } else {
      cout << str + c << endl;
   }
}
int main(){
   string str = "sass";
   char c = 's';
   makeNonPalindrome(str, c);
   return 0;
}

Output

Non-palindromic string is: 
sasss
  • Kerumitan masa - O(N) kerana kami menggunakan gelung for untuk mengira jumlah bilangan aksara yang sama dengan aksara yang diberikan.

  • Kerumitan Ruang - O(1) kerana kami tidak menggunakan sebarang ruang tambahan.

Kaedah 2

Dalam kaedah ini, kami menggunakan logik yang sama seperti dalam kaedah pertama, tetapi kami menggunakan gelung for untuk memeriksa sama ada rentetan itu adalah palindrom. Selain itu, kami telah menggunakan kaedah count() untuk mengira jumlah bilangan aksara yang diberikan dalam rentetan.

Algoritma

  • Langkah 1 - Gunakan kaedah count(), menghantar rentetan sebagai parameter pertama dan aksara c diberikan sebagai parameter kedua untuk mengira bilangan aksara yang sama dengan aksara yang diberikan dalam rentetan.

  • Langkah 2 - Jika nilai yang dikembalikan oleh kaedah count() adalah sama dengan panjang rentetan, cetak "-1".

  • Langkah 3 - Dalam fungsi isPalindrome(), mulakan 'i' kepada 0 dan 'j' kepada panjang rentetan - 1. Selepas itu, pengguna menggunakan gelung untuk mengulang dan membandingkan aksara permulaan dan penamat. Jika berlaku sebarang ketidakpadanan, kembalikan palsu.

  • Langkah 4 − Masukkan aksara yang diberikan pada sebarang kedudukan dan semak sama ada rentetan itu bukan palindrom. Jika rentetan yang terhasil ialah bukan palindrom, kami mempunyai jawapan jika tidak, tukar kedudukan aksara yang diberikan dalam rentetan dan semak semula.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
// Function to check if a string is a palindrome
bool isPalindrome(string str) {
   // Start from the leftmost and rightmost corners of str
   for (int i = 0, j = str.length() - 1; i < j; i++, j--){
      // If there is a mismatch, then the string is not palindrome; return false.
      if (str[i] != str[j])
         return false;
   }
   return true;
}
// Function to make a string non-palindrome by adding a character
void makeNonPalindrome(string str, char c){
   //   if all characters are the same as a given character, then the string cannot be made non-palindrome
   if (count(str.begin(), str.end(), c) == str.length()) {
      cout << "-1";
      cout << "We can convert the string into a non-palindromic string by adding a given character at any position.";
      return;
   }
   cout << "Non-palindromic string is: " << endl;
   // append the character at the start, and check if it is a palindrome
   string temp = c + str;
   if (!isPalindrome(temp)){
      cout << temp << endl;
   } else {
      cout << c + str << endl;
   }
}
int main() {
   string str = "nayan";
   char c = 'n';
   makeNonPalindrome(str, c);
   return 0;
}

Output

Non-palindromic string is: 
nnayan
  • Kerumitan masa - O(N)

  • Kerumitan ruang - O(1)

Kesimpulan

Kami mempelajari dua kaedah untuk menukar rentetan yang diberikan kepada rentetan bukan palindromik, iaitu memasukkan aksara yang diberikan pada sebarang kedudukan. Kedua-dua kaedah menggunakan logik yang sama tetapi dalam kaedah pertama kami telah menulis fungsi manual untuk mengira bilangan aksara yang sama yang sama dengan aksara yang diberikan manakala dalam kaedah kedua kami telah menggunakan kaedah count() .

Kaedah pertama lebih sesuai untuk tujuan pembelajaran, dan kaedah kedua lebih sesuai untuk pembangunan masa nyata.

Atas ialah kandungan terperinci Buat rentetan bukan palindrom dengan memasukkan aksara yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam