Dalam masalah ini, kita perlu menyemak sama ada semua aksara rentetan boleh dibuat sama dengan menambah dan mengurangkan operasi. Kita boleh mendapatkan berat setiap aksara berdasarkan nilai ASCIInya dan menyemak sama ada jumlah berat boleh digunakan untuk menjadikan semua aksara sama.
Pernyataan Masalah – Kami diberi rentetan rentetan panjang N yang mengandungi aksara abjad huruf kecil. Kita perlu menyemak sama ada kita boleh membuat semua aksara dalam rentetan sama dengan memilih salah satu daripada dua aksara, meningkatkan satu aksara, dan kemudian mengurangkan aksara lain sebanyak 1. Mencetak "ya" jika boleh, jika tidak mencetak "tidak".
Enter – str = ‘aedb
Output-str = ‘aedb
Penjelasan - ‘a’ boleh meningkat sebanyak 2 dan ‘e’ boleh berkurangan sebanyak 2. Pada masa yang sama, 'b' boleh ditambah dengan 1 dan 'd' boleh ditambah dengan 1. Oleh itu, rentetan yang terhasil boleh menjadi 'cccc'.
Enter – str = ‘abd’
Output-“Tidak”
Penjelasan – Kita tidak boleh menjadikan semua aksara rentetan sama dengan menambah dan mengurangkan operasi
Masuk -‘g’
Output - ‘Ya’
Penjelasan – Rentetan mengandungi hanya satu aksara, jadi semua aksara rentetan sudah sama
Dalam kaedah ini, kami akan mengira jumlah berat aksara rentetan. Wajaran aksara ditakrifkan sebagai ‘a’ = 1, ‘b’ = 2, ‘c’ = 3, …, ‘z’ = 26. Jadi jika kita membahagikan jumlah berat dengan panjang rentetan, kita boleh mengatakan bahawa dengan menambah satu aksara dan mengurangkan satu lagi, kita menjadikan semua aksara rentetan itu sama.
Tentukan pembolehubah "len" dan gunakan kaedah size() untuk menyimpan saiz rentetan.
Takrifkan pembolehubah "totalWeight" untuk menyimpan jumlah berat semua aksara rentetan tertentu
Dapatkan berat aksara tertentu menggunakan kod ASCII setiap aksara dan tambahkannya pada pembolehubah "totalWeight".
Kembalikan benar jika nilai "totalWeight" boleh dibahagi dengan "len". Jika tidak, pulangan palsu.
#include <iostream> using namespace std; // function to check if all characters of a string can be made equal by incrementing or decrementing by 1 bool canMakeEqual(string str){ int len = str.size(); // store sum of ASCII values of characters int totalWeight = 0; // Iterate over the string for (int i = 0; i < len; i++){ // get the ASCII value of each character totalWeight += str[i] - 'a' + 1; } return (totalWeight % len == 0); } int main(){ string str = "aedb"; if (canMakeEqual(str)) cout << "Yes"; else cout << "No"; return 0; }
Yes
Kerumitan masa - O(N), kerana kita mengulangi rentetan.
Kerumitan ruang - O(1) kerana kami menggunakan ruang malar.
Kami belajar untuk menyemak sama ada semua aksara rentetan boleh sama dengan menambah dan mengurangkan nilai ASCII aksara itu. Kami menyelesaikan masalah ini dari segi "jumlah berat". Pengguna juga boleh cuba mencari rentetan yang terhasil. Untuk mencari rentetan yang terhasil, cari nilai ASCII yang sepadan dengan (totalWeight/len) dan tambahkan aksara "len" pada rentetan yang diberikan.
Atas ialah kandungan terperinci Menyemak sama ada semua aksara dalam rentetan boleh dibuat sama dengan menambah atau mengurangkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!