Computer >> Máy Tính >  >> Lập trình >> C ++

Tạo lại các chữ số gốc từ tiếng Anh trong C ++


Giả sử chúng ta có một chuỗi không rỗng chứa biểu diễn tiếng Anh không theo thứ tự của các chữ số 0-9, xuất ra các chữ số theo thứ tự tăng dần. Có một số thuộc tính -

  • Đầu vào được đảm bảo là hợp lệ và có thể được chuyển đổi thành các chữ số ban đầu của nó. Điều đó có nghĩa là các đầu vào không hợp lệ như "abc" hoặc "zerone" không được phép.
  • Độ dài đầu vào nhỏ hơn 50.000.

Vì vậy, nếu đầu vào giống như "fviefuro", thì đầu ra sẽ là 45.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nums:=một mảng chứa các số bằng chữ cái tiếng Anh từ 0 đến 9.
  • tạo một số mảng có kích thước là 10
  • ans:=một chuỗi rỗng. và n:=kích thước của chuỗi.
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • nếu s [i] =‘z’, thì hãy tăng số lượng [0] lên 1
    • if s [i] =‘w’, sau đó tăng số lượng [2] lên 1
    • nếu s [i] =‘g’, thì hãy tăng số lượng [8] lên 1
    • if s [i] =‘x’, thì hãy tăng số lượng [6] lên 1
    • if s [i] =‘v’, sau đó tăng số lượng [5] lên 1
    • if s [i] =‘o’, sau đó tăng số lượng [1] lên 1
    • if s [i] =‘s’, sau đó tăng số lượng [7] lên 1
    • if s [i] =‘f’, sau đó tăng số lượng [4] lên 1
    • if s [i] =‘h’, sau đó tăng số lượng [3] lên 1
    • if s [i] =‘i’, sau đó tăng số lượng [9] lên 1
  • count [7]:=count [7] - count [6]
  • count [5]:=count [5] - count [7]
  • count [4]:​​=count [4] - count [5]
  • count [1]:=count [1] - (count [2] + count [4] + count [0])
  • count [3]:=count [3] - count [8]
  • count [9]:=count [9] - (count [5] + count [6] + count [8])
  • đối với tôi trong phạm vi từ 0 đến 9, hãy thực hiện
    • cho j trong phạm vi 0 để đếm [i]
      • ans:=ans + ký tự của (i + ‘0’)
  • trả lại ans

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string originalDigits(string s) {
      string nums[]= {"zero", "one", "two", "three", "four", "five", "six", "seven","eight", "nine"};
      vector <int> cnt(10);
      string ans = "";
      int n = s.size();
      for(int i = 0; i < n; i++){
         if(s[i] == 'z')cnt[0]++;
         if(s[i] == 'w') cnt[2]++;
         if(s[i] == 'g')cnt[8]++;
         if(s[i] == 'x')cnt[6]++;
         if(s[i] == 'v')cnt[5]++;
         if(s[i] == 'o')cnt[1]++;
         if(s[i] == 's')cnt[7]++;
         if(s[i] == 'f')cnt[4]++;
         if(s[i] == 'h')cnt[3]++;
         if(s[i] == 'i') cnt[9]++;
      }
      cnt[7] -= cnt[6];
      cnt[5] -= cnt[7];
      cnt[4] -= cnt[5];
      cnt[1] -= (cnt[2] + cnt[4] + cnt[0]);
      cnt[3] -= cnt[8];
      cnt[9] -= (cnt[5] + cnt[6] + cnt[8]);
      for(int i = 0; i < 10; i++){
         for(int j = 0; j < cnt[i]; j++){
            ans += (char)(i + '0');
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.originalDigits("fviefuro");
}

Đầu vào

"fviefuro"

Đầu ra

"45"