Maison  >  Article  >  développement back-end  >  Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

WBOY
WBOYavant
2023-09-11 20:37:02796parcourir

Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

Dans l'article d'aujourd'hui, nous aborderons un problème unique lié aux opérations sur les chaînes en C++. Cette question est "Dans la chaîne donnée, l'expression alphabétique est constituée de nombres brouillés." Cette question peut constituer un bon exercice pour améliorer vos compétences en matière de manipulation de chaînes et de structure de données en C++.

Énoncé du problème

À partir d'une chaîne, la tâche consiste à identifier les nombres dans lesquels les expressions de lettres sont brouillées. Par exemple, si la chaîne d'entrée est "oentow", elle contient une représentation alphabétique du chiffre 2 (t, w, o) et du chiffre 1 (o, n, e) brouillés.

Méthode de solution C++

Pour résoudre ce problème, nous utiliserons une table de hachage ou une carte non ordonnée en C++ pour stocker la fréquence des lettres dans la chaîne. Nous comparerons ensuite cette carte de fréquence à une carte prédéfinie de la représentation alphabétique de chaque nombre. Si une représentation d'un nombre peut être formée à partir de la chaîne d'entrée, nous afficherons ce nombre.

La traduction chinoise de

Exemple

est :

Exemple

Voici le code C++ pour résoudre le problème −

#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;
}

Sortie

The jumbled digits in the string are: 1 2 

Explication avec un cas de test

se traduit par :

Explication avec un cas de test

Considérons la chaîne "oentow".

Lorsque cette chaîne est transmise à la fonction findJumbledDigits, elle génère d'abord une carte de fréquence pour la chaîne : {'o' : 2, 'e' : 1, 'n' : 1, 't' : 1, 'w' : 1}.

Ensuite, pour chaque nombre de 0 à 9, il génère une carte de fréquence de la représentation alphabétique du nombre et vérifie si cette carte peut être formée à partir de la carte de fréquence de la chaîne.

La représentation "un" du chiffre 1 a la cartographie de fréquence {'o' : 1, 'n' : 1, 'e' : 1}, tandis que la représentation "deux" du chiffre 2 a la cartographie de fréquence {' t' : 1 , 'w' : 1, 'o' : 1}.

Ces deux peuvent être générés par une carte de fréquence de chaînes, nous ajoutons donc ces nombres au résultat.

Enfin, il affiche le résultat : "Les chiffres brouillés dans la chaîne sont : 1 2".

Conclusion

Cette question montre comment nous pouvons utiliser le mappage de fréquence pour résoudre des problèmes complexes de manipulation de chaînes en C++. C'est une excellente question pour mettre en pratique vos compétences en matière de gestion des chaînes et des structures de données. Continuez à pratiquer des questions comme celle-ci pour améliorer vos compétences en codage C++.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer