📜  字母表示在给定字符串中混乱的数字

📅  最后修改于: 2021-09-06 06:46:33             🧑  作者: Mango

给定一个长度为N的字符串S ,它是在[0 – 9]范围内任意数量的数字以混杂格式的英文表示。任务是从这个表示中找到数字。
注意:以任何顺序打印数字

例子

方法:这个问题可以通过观察一个有趣的事实来轻松解决,即所有偶数数字至少有一个字符不存在于任何其他字符串,而所有奇数数字都不存在:

对于奇数,每个字母也出现在其他数字中。单词中的奇数是{一、三、五、七、九}。请按照以下步骤解决问题

  • 创建一个字符串向量num ,它将保存从09 的英文字母数字和一个大小为10的整数向量count[] ,并创建一个答案字符串ans来显示数字。
  • 现在,将给定的字符串从i = 0遍历到 N-1
  • 如果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
  • 现在,更新向量的元素,如下所示:
  • 现在,从0 到 9遍历向量并将字符(i + ‘0’)附加到anscount[i]次。
  • 最后,打印ans作为所需的答案。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to convert the jumbled
// string into digits
string finddigits(string s)
{
 
    // Strings of digits 0-9
    string num[]
        = { "zero", "one", "two",
            "three", "four", "five",
            "six", "seven", "eight", "nine" };
 
    // Initialize vector
    vector arr(10);
 
    // Initialize answer
    string ans = "";
 
    // Size of the string
    int n = s.size();
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
        if (s[i] == 'z')
            arr[0]++;
        if (s[i] == 'w')
            arr[2]++;
        if (s[i] == 'g')
            arr[8]++;
        if (s[i] == 'x')
            arr[6]++;
        if (s[i] == 'v')
            arr[5]++;
        if (s[i] == 'o')
            arr[1]++;
        if (s[i] == 's')
            arr[7]++;
        if (s[i] == 'f')
            arr[4]++;
        if (s[i] == 'h')
            arr[3]++;
        if (s[i] == 'i')
            arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < arr[i]; j++) {
            ans += (char)(i + '0');
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
int main()
{
    string s = "owoftnuoer";
    cout << finddigits(s) << endl;
}


Java
// Java program for the above approach
import java.io.*;
class GFG {
 
  // Function to convert the jumbled
  // string into digits
  static String finddigits(String s)
  {
 
    // Strings of digits 0-9
    String[] num
      = { "zero", "one", "two",   "three", "four",
         "five", "six", "seven", "eight", "nine" };
 
    // Initialize vector
    int[] arr = new int[10];
 
    // Initialize answer
    String ans = "";
 
    // Size of the string
    int n = s.length();
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
      if (s.charAt(i) == 'z')
        arr[0]++;
      if (s.charAt(i) == 'w')
        arr[2]++;
      if (s.charAt(i) == 'g')
        arr[8]++;
      if (s.charAt(i) == 'x')
        arr[6]++;
      if (s.charAt(i) == 'v')
        arr[5]++;
      if (s.charAt(i) == 'o')
        arr[1]++;
      if (s.charAt(i) == 's')
        arr[7]++;
      if (s.charAt(i) == 'f')
        arr[4]++;
      if (s.charAt(i) == 'h')
        arr[3]++;
      if (s.charAt(i) == 'i')
        arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < arr[i]; j++) {
        ans += (char)(i + '0');
      }
    }
 
    // Return answer
    return ans;
  }
 
  // Driver Code
  public static void main(String[] args)
  {
    String s = "owoftnuoer";
    System.out.println(finddigits(s));
  }
}
 
// This code is contributed by Dharanendra L V


Python3
# Python3 program for the above approach
 
# Function to convert the jumbled
# into digits
def finddigits(s):
     
    # Strings of digits 0-9
    num = [ "zero", "one", "two", "three",
            "four", "five", "six", "seven",
            "eight", "nine"]
 
    # Initialize vector
    arr = [0] * (10)
 
    # Initialize answer
    ans = ""
 
    # Size of the string
    n = len(s)
 
    # Traverse the string
    for i in range(n):
        if (s[i] == 'z'):
            arr[0] += 1
        if (s[i] == 'w'):
            arr[2] += 1
        if (s[i] == 'g'):
            arr[8] += 1
        if (s[i] == 'x'):
            arr[6] += 1
        if (s[i] == 'v'):
            arr[5] += 1
        if (s[i] == 'o'):
            arr[1] += 1
        if (s[i] == 's'):
            arr[7] += 1
        if (s[i] == 'f'):
            arr[4] += 1
        if (s[i] == 'h'):
            arr[3] += 1
        if (s[i] == 'i'):
            arr[9] += 1
             
    # Update the elements of the vector
    arr[7] -= arr[6]
    arr[5] -= arr[7]
    arr[4] -= arr[5]
    arr[1] -= (arr[2] + arr[4] + arr[0])
    arr[3] -= arr[8]
    arr[9] -= (arr[5] + arr[6] + arr[8])
 
    # Print the digits into their
    # original format
    for i in range(10):
        for j in range(arr[i]):
            ans += chr((i) + ord('0'))
 
    # Return answer
    return ans
 
# Driver Code
if __name__ == '__main__':
     
    s = "owoftnuoer"
     
    print(finddigits(s))
 
# This code is contributed by mohit kumar 29


C#
// C# program for the above approach
using System;
public class GFG
{
 
  // Function to convert the jumbled
  // string into digits
  static string finddigits(string s)
  {
 
    // Initialize vector
    int[] arr = new int[10];
 
    // Initialize answer
    string ans = "";
 
    // Size of the string
    int n = s.Length;
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
      if (s[i] == 'z')
        arr[0]++;
      if (s[i] == 'w')
        arr[2]++;
      if (s[i] == 'g')
        arr[8]++;
      if (s[i] == 'x')
        arr[6]++;
      if (s[i] == 'v')
        arr[5]++;
      if (s[i] == 'o')
        arr[1]++;
      if (s[i] == 's')
        arr[7]++;
      if (s[i] == 'f')
        arr[4]++;
      if (s[i] == 'h')
        arr[3]++;
      if (s[i] == 'i')
        arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < arr[i]; j++) {
        ans += (char)(i + '0');
      }
    }
 
    // Return answer
    return ans;
  }
 
  // Driver Code
  static public void Main()
  {
    string s = "owoftnuoer";
    Console.WriteLine(finddigits(s));
  }
}
 
// This code is contributed by Dharanendra L V


输出:
124

时间复杂度: O(N) 其中N字符串长度
辅助空间: O(N)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live