Dalam soalan ini, kita perlu menggantikan aksara rentetan yang diberikan berdasarkan aksara yang diberikan dalam tatasusunan pasangan aksara. Kami akan membincangkan dua penyelesaian yang berbeza. Dalam kaedah pertama, kami menggantikan setiap aksara dengan menggelung melalui aksara dan pasangan aksara rentetan yang diberikan.
Dalam kaedah kedua, kami akan menggunakan tatasusunan panjang 26 untuk menyimpan aksara gantian yang dikaitkan dengan setiap aksara dan menukar aksara rentetan yang diberikan.
Pernyataan Masalah − Kami diberi rentetan str yang mengandungi N aksara abjad huruf kecil. Juga, kami diberi tatasusunan yang mengandungi pasangan aksara. Kita perlu menggantikan pasangan[i][0] aksara dalam rentetan yang diberikan dengan pasangan[i][1].
Input – str = "xyz", pairs = {{'x', 'a'}, {'y', 'b'},, {'z', 'c'}}
Output – ‘abc’
Di sini, 'x' digantikan dengan 'a', 'y' digantikan dengan 'b', dan 'z' digantikan dengan 'c'.
Input – str = "abderb", pairs = {{'a', 'e'}, {'b', 't'}, {'e', 'f'}, {'r', 's'}}
Output – ‘etdfst’
Dalam rentetan, 'a' digantikan dengan 'e', b' digantikan dengan 't', 'e' digantikan dengan 'f', dan 'r' digantikan dengan 's' .
Dalam kaedah ini, kami akan mengulangi setiap pasangan aksara dan menggantikan aksara yang sepadan dalam rentetan yang diberikan. Kami memerlukan dua gelung bersarang untuk mengulangi rentetan bagi setiap gelung.
Langkah 1 - Simpan saiz rentetan dalam pembolehubah 'N' dan tatasusunan dalam pembolehubah 'M'.
Langkah 2 - Simpan salinan rentetan dalam pembolehubah 'temp'.
Langkah 3 - Gunakan gelung for untuk lelaran melalui senarai pasangan.
Langkah 4 − Dalam gelung, simpan aksara pertama dalam pembolehubah ‘a’ dan aksara kedua dalam pembolehubah ‘b’.
Langkah 5 - Lelaran pada rentetan menggunakan gelung bersarang.
Langkah 6 − Dalam gelung bersarang, jika aksara semasa rentetan yang diberikan adalah sama dengan 'a', gantikan aksara semasa dengan 'b' dalam sementara watak String in.
Langkah 7 - Kembalikan nilai temp.
#include <bits/stdc++.h> using namespace std; string replaceChars(string str, vector<vector<char>> pairs){ // stror the size of the string and the array int N = str.size(), M = pairs.size(); // Create a copy of the string str string temp = str; // Iterate over the array for (int x = 0; x < M; x++){ // store the characters from the pair char a = pairs[x][0], b = pairs[x][1]; // iterate over the string for (int y = 0; y < N; y++){ // If the character is equal to a, then replace it with b if (str[y] == a){ temp[y] = b; } } } return temp; } int main(){ string str = "abderb"; vector<vector<char>> pairs{{'a', 'e'}, {'b', 't'}, {'e', 'f'}, {'r', 's'}}; cout << "The string after replacing with the given characters is - " << replaceChars(str, pairs); return 0; }
The string after replacing with the given characters is - etdfst
Kerumitan masa - O(N*M), dengan N ialah panjang rentetan dan M ialah panjang tatasusunan pasangan aksara.
Kerumitan ruang - O(N), kerana kami menyimpan rentetan baharu dalam pembolehubah temp.
Dalam kaedah ini, kita boleh membuat tatasusunan saiz 26. Kami kemudiannya boleh menyimpan aksara yang boleh diganti pada kedudukan aksara semasa. Akhir sekali, kita boleh mengambil elemen yang boleh diganti daripada tatasusunan dan mengemas kini setiap aksara rentetan.
Langkah 1 - Dapatkan saiz rentetan sebagai 'N' dan saiz tatasusunan sebagai 'M'.
Langkah 2 - Tentukan tatasusunan "awal" dan "akhir" dengan panjang 26.
Langkah 3 - Gelung melalui rentetan dan simpan str[Y] dalam indeks tatasusunan awal dan akhir "str[Y] - a". Di sini, str[Y] - 'a' memberikan indeks antara 0 dan 25 berdasarkan nilai ASCII aksara.
Sebab mengapa str[Y] disimpan dalam kedudukan 'str[Y] - a' tatasusunan awal dan akhir ialah jika mana-mana aksara wujud dalam rentetan tetapi tidak dalam pasangan aksara, kita boleh Kekalkannya tidak berubah.
Langkah 4 - Ulangi tatasusunan pasangan aksara yang diberikan. Dalam gelung, gunakan gelung bersarang untuk lelaran ke atas tatasusunan awal. Jika aksara pertama pasangan semasa adalah sama dengan aksara tatasusunan "awal", aksara tatasusunan "akhir" dikemas kini dengan aksara kedua pasangan semasa.
Langkah 5 − Takrifkan pembolehubah 'hasil' dan mulakannya kepada rentetan kosong.
Langkah 6 - Lelaran melalui rentetan input, dapatkan aksara yang sepadan dengan aksara semasa daripada tatasusunan "akhir", dan tambahkannya pada rentetan "hasil".
Langkah 7 - Kembalikan rentetan 'hasil'.
#include <bits/stdc++.h> using namespace std; // Function to replace the characters in the string string replaceChars(string str, vector<vector<char>> pairs){ // getting the size of the string and the vector int N = str.size(), M = pairs.size(); // Declare two arrays of size 26 char initial[26]; char final[26]; // Check all existing characters in the string for (int Y = 0; Y < N; Y++){ initial[str[Y] - 'a'] = str[Y]; final[str[Y] - 'a'] = str[Y]; } // Iterate over the range [0, M] for (int X = 0; X < M; X++){ // get characters from the vector char a = pairs[X][0], b = pairs[X][1]; // Iterate over the range [0, 26] for (int Y = 0; Y < 26; Y++){ // If the character is the same as a, then replace it with b in the final array if (initial[Y] == a){ final[Y] = b; } } } string result = ""; // get the final string using the final array for (int Y = 0; Y < N; Y++){ result += final[str[Y] - 'a']; } return result; } int main(){ string str = "aberb"; vector<vector<char>> pairs{{'a', 'e'}, {'b', 't'}, {'e', 'f'}, {'r', 's'}}; cout << "The string after replacing with the given characters is - " << replaceChars(str, pairs); return 0; }
The string after replacing with the given characters is - etfst
Kerumitan masa - O(N), sebagai gelung bersarang, lelaran berterusan sahaja.
Kerumitan ruang - O(1), kerana ia menggunakan tatasusunan panjang 26, yang malar.
Atas ialah kandungan terperinci Mengubah suai rentetan dengan menggantikan semua kemunculan aksara tertentu dengan aksara gantian yang ditentukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!