Rumah >pembangunan bahagian belakang >C++ >Diberi rentetan di mana huruf mewakili nombor berebut

Diberi rentetan di mana huruf mewakili nombor berebut

WBOY
WBOYke hadapan
2023-09-11 20:37:02820semak imbas

Diberi rentetan di mana huruf mewakili nombor berebut

Dalam artikel hari ini, kami akan menyelidiki isu unik yang berkaitan dengan operasi rentetan dalam C++. Soalan ini ialah "Dalam rentetan yang diberikan, ungkapan abjad ialah nombor bergegar." Soalan ini boleh berfungsi sebagai latihan yang baik untuk meningkatkan kemahiran manipulasi rentetan dan struktur data dalam C++.

Pernyataan Masalah

Diberi rentetan, tugasnya adalah untuk mengenal pasti nombor di mana ungkapan huruf itu diacak. Sebagai contoh, jika rentetan input ialah "oentow", ia mempunyai perwakilan abjad bagi nombor 2 (t, w, o) dan nombor 1 (o, n, e) yang diacak.

Kaedah penyelesaian C++

Untuk menyelesaikan masalah ini, kami akan menggunakan jadual hash atau peta tidak tertib dalam C++ untuk menyimpan kekerapan huruf dalam rentetan. Kami kemudiannya akan membandingkan peta frekuensi ini dengan peta pratakrif perwakilan abjad bagi setiap nombor. Jika perwakilan nombor boleh dibentuk daripada rentetan input, kami akan mengeluarkan nombor itu.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

Ini adalah kod C++ untuk menyelesaikan masalah −

#include <iostream>
#include <unordered_map>
#include <vector>

// Array of digit representations
std::string digitRepresentations[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

std::unordered_map<char, int> generateFrequencyMap(std::string str) {
   std::unordered_map<char, int> freqMap;
   for (char c : str) {
      freqMap[c]++;
   }
   return freqMap;
}

std::vector<int> findJumbledDigits(std::string str) {
   std::unordered_map<char, int> strFreqMap = generateFrequencyMap(str);
   std::vector<int> digits;
   
   for (int i = 0; i < 10; i++) {
      std::unordered_map<char, int> digitFreqMap = generateFrequencyMap(digitRepresentations[i]);
      bool canFormDigit = true;
   
      for (auto pair : digitFreqMap) {
         if (strFreqMap[pair.first] < pair.second) {
               canFormDigit = false;
               break;
         }
      }
   
      if (canFormDigit) {
         digits.push_back(i);
      }
   }

   return digits;
}

int main() {
   std::string input = "oentow";
   std::vector<int> digits = findJumbledDigits(input);
   
   std::cout << "The jumbled digits in the string are: ";
   for (int digit : digits) {
      std::cout << digit << " ";
   }

   return 0;
}

Output

The jumbled digits in the string are: 1 2 

Penjelasan dengan Kes Ujian

diterjemahkan sebagai:

Penjelasan dengan Kes Ujian

Mari kita pertimbangkan rentetan "oentow".

Apabila rentetan ini dihantar ke fungsi findJumbledDigits, ia mula-mula menjana peta kekerapan untuk rentetan: {'o': 2, 'e': 1, 'n': 1, 't': 1, 'w' : 1}.

Kemudian, untuk setiap nombor dari 0 hingga 9, ia menjana peta kekerapan bagi perwakilan abjad nombor dan menyemak sama ada peta ini boleh dibentuk daripada peta frekuensi rentetan.

Perwakilan "satu" daripada nombor 1 mempunyai pemetaan kekerapan {'o': 1, 'n': 1, 'e': 1}, manakala perwakilan "dua" nombor 2 mempunyai pemetaan kekerapan {' t': 1 , 'w': 1, 'o': 1}.

Kedua-dua ini boleh dijana oleh peta frekuensi rentetan, jadi kami menambah nombor ini pada hasilnya.

Akhirnya, ia mengeluarkan keputusan: "Digit bercampur aduk dalam rentetan ialah: 1 2".

Kesimpulan

Soalan ini menunjukkan bagaimana kita boleh menggunakan pemetaan frekuensi untuk menyelesaikan masalah manipulasi rentetan yang kompleks dalam C++. Ini ialah soalan yang bagus untuk melatih kemahiran pengendalian rentetan dan struktur data anda. Teruskan berlatih soalan seperti ini untuk meningkatkan kemahiran pengekodan C++ anda.

Atas ialah kandungan terperinci Diberi rentetan di mana huruf mewakili nombor berebut. 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