首頁 >後端開發 >C++ >給定一個字串,其中字母的表示方式被打亂的數字

給定一個字串,其中字母的表示方式被打亂的數字

WBOY
WBOY轉載
2023-09-11 20:37:02812瀏覽

給定一個字串,其中字母的表示方式被打亂的數字

在今天的文章中,我們將深入探討與C 中字串操作相關的一個獨特問題。這個問題是「在給定字串中,字母表達式被打亂的數字。」這個問題可以作為一個很好的練習,來提高你在C 中的字串操作和資料結構技能。

問題陳述

給定一個字串,任務是辨識其中字母表達方式被打亂的數字。例如,如果輸入字串是"oentow",它有一個數字2(t, w, o)和數字1(o, n, e)的字母表達方式被打亂。

C 解決方案方法

為了解決這個問題,我們將在C 中使用雜湊表或無序映射來儲存字串中字母的頻率。然後,我們將將此頻率映射與每個數字的字母表示的預定義映射進行比較。如果一個數字的表示可以從輸入字串中形成,我們將輸出該數字。

Example

的中文翻譯為:

範例

這是解決問題的C 程式碼 −

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

輸出

The jumbled digits in the string are: 1 2 

Explanation with a Test Case

的翻譯為:

使用測試案例解釋

讓我們考慮字串"oentow"。

當這個字串被傳遞給findJumbledDigits函數時,它首先為字串產生一個頻率映射:{'o': 2, 'e': 1, 'n': 1, 't': 1, ' w': 1}。

然後,對於從0到9的每個數字,它產生數字的字母表示的頻率映射,並檢查該映射是否可以從字串的頻率映射中形成。

數字1的表示形式「一個」具有頻率映射{'o': 1, 'n': 1, 'e': 1},而數字2的表示形式「two」具有頻率映射{'t' : 1, 'w': 1, 'o': 1}。

這兩個可以由字串的頻率映射生成,所以我們將這些數字添加到結果中。

最後,它輸出結果:"The jumbled digits in the string are: 1 2"。

結論

這個問題展示了我們如何使用頻率映射來解決C 中的複雜字串操作問題。這是一個很好的問題,可以練習你的字串和資料結構處理技巧。繼續練習這樣的問題,提升你的C 編碼能力。

以上是給定一個字串,其中字母的表示方式被打亂的數字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除