Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Jadikan semua aksara dalam rentetan sama dengan menambah atau mengurangkan nilai ASCII minimum

Jadikan semua aksara dalam rentetan sama dengan menambah atau mengurangkan nilai ASCII minimum

王林
王林ke hadapan
2023-08-26 12:53:121341semak imbas

Jadikan semua aksara dalam rentetan sama dengan menambah atau mengurangkan nilai ASCII minimum

Sistem ASCII (American Standard Code for Information Interchange) sering digunakan dalam pengaturcaraan untuk memanipulasi aksara Dalam artikel ini, kita akan mengkaji masalah menarik di mana kita perlu menjadikan semua aksara rentetan sama dengan bilangan minimum. penambahan atau pengurangan nilai ASCII aksara Kami akan memberikan penjelasan terperinci tentang masalah tersebut, mencadangkan penyelesaian yang cekap dalam C++ dan menganalisis kerumitannya.

Memahami masalah

Memandangkan rentetan yang terdiri daripada huruf Inggeris huruf kecil, tugas kami adalah untuk menjadikan semua aksara dalam rentetan itu sama dengan menukar nilai ASCIInya ialah kita perlu melakukan ini menggunakan bilangan perubahan terkecil.

Kami boleh beroperasi dengan menambah atau mengurangkan nilai ASCII aksara, setiap kenaikan atau pengurangan dikira sebagai satu operasi. Matlamatnya adalah untuk mencari bilangan operasi minimum yang diperlukan untuk menjadikan semua aksara dalam rentetan sama.

Kaedah

Untuk menyelesaikan masalah ini, kita perlu mencari watak yang paling kerap muncul dalam rentetan. Sebabnya ia memerlukan lebih sedikit operasi untuk menukar semua aksara lain kepada aksara yang paling biasa ini.

Pertama, kita akan mengira kekerapan setiap aksara dalam rentetan. Kemudian kita akan mencari watak yang mempunyai kekerapan tertinggi. Bilangan operasi yang diperlukan untuk menjadikan semua aksara sama dengan aksara ini akan menjadi jumlah perbezaan antara nilai ASCII bagi aksara yang paling kerap dan nilai ASCII bagi semua aksara lain.

Penyelesaian C++

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

Berikut ialah kod C++ untuk menyelesaikan masalah -

#include<bits/stdc++.h>
using namespace std;

int minOperations(string str) {
   int freq[26] = {0};
   
   for (char c : str) {
      freq[c - 'a']++;
   }
   
   int max_freq = *max_element(freq, freq+26);
   int total_chars = str.length();
   return total_chars - max_freq;
}

int main() {
   string str;
   cout << "Enter the string: ";
   cin >> str;
   cout << "Minimum operations: " << minOperations(str) << endl;
   return 0;
}

Output

Enter the string: Minimum operations: 0

Penjelasan Kod

Pertimbangkan rentetan "abcdd". Aksara 'd' muncul dua kali, lebih banyak daripada aksara lain Oleh itu, kita harus menukar semua aksara lain kepada 'd' Nilai ASCII ialah 100 daripada ' a', 'b' dan 'c' masing-masing ialah 97, 98, dan 99 Jadi, bilangan operasi minimum ialah (100-97) + (100-98) + (100-99) =. 3 + 2 + 1 = 6. Walau bagaimanapun, kerana kita perlu meminimumkan bilangan operasi, sebaliknya kita akan mengurangkan nilai ASCII 'a', 'b' dan 'c' dalam kes ini, nombor minimum operasi ialah (97-97) + (98-97) + (99-97) = 0 + 1 + 2 = 3.

Kesimpulan

Dalam artikel ini, kami melihat cara menyelesaikan masalah unik yang melibatkan nilai ASCII dan manipulasi rentetan dalam C++.

Atas ialah kandungan terperinci Jadikan semua aksara dalam rentetan sama dengan menambah atau mengurangkan nilai ASCII minimum. 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