Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 영어의 원래 숫자 재구성


0-9 숫자의 잘못된 영어 표현을 포함하는 비어 있지 않은 문자열이 있다고 가정하고 숫자를 오름차순으로 출력합니다. 몇 가지 속성이 있습니다 -

  • 입력은 유효하며 원래 숫자로 변환될 수 있습니다. 즉, "abc" 또는 "zero"와 같은 잘못된 입력은 허용되지 않습니다.
  • 입력 길이가 50,000 미만입니다.

따라서 입력이 "fviefuro"와 같으면 출력은 45가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • nums :=0에서 9까지의 영문자로 된 숫자를 포함하는 배열
  • 크기가 10인 배열 하나 만들기
  • ans :=빈 문자열입니다. 및 n :=문자열의 크기입니다.
  • 0 ~ n – 1 범위의 i에 대해
    • s[i] ='z'이면 count[0]을 1만큼 증가
    • s[i] ='w'이면 count[2]를 1만큼 증가
    • s[i] ='g'이면 count[8]을 1만큼 증가
    • s[i] ='x'이면 count[6]을 1만큼 증가
    • s[i] ='v'이면 count[5]를 1만큼 증가
    • s[i] ='o'이면 count[1]을 1만큼 증가
    • s[i] ='s'이면 count[7]을 1만큼 증가
    • s[i] ='f'이면 count[4]를 1만큼 증가
    • s[i] ='h'이면 count[3]을 1 증가시킵니다.
    • s[i] ='i'이면 count[9]를 1만큼 증가
  • 카운트[7] :=카운트[7] – 카운트[6]
  • count[5] :=count[5] – 카운트[7]
  • count[4] :=count[4] – 카운트[5]
  • count[1] :=count[1] – (count[2] + count[4] + count[0])
  • count[3] :=count[3] – 카운트[8]
  • count[9] :=count[9] – (count[5] + count[6] + count[8])
  • 0에서 9 사이의 i에 대해
    • 범위 0에 있는 j의 경우 [i]
      • ans :=as + (i + '0')의 문자
  • 반환

예시(C++)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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

입력

"fviefuro"

출력

"45"