Digits whose alphabetic representations are jumbled in a given string
Given a string S of length N which is the English representation of any number of digits in the range [0 – 9] in jumbled format. The task is to find the digits from this representation.
Note: Print digits in any order
Examples
Input: S = “owoftnuoer”
Output: 124
Explanation: The digits here are jumbled form of one, two and four. Therefore, the required output can be 124 or 421 or 214 etc.
Input: S = “zesxrionezoreo”
Output: 0016
Approach: This problem can be solved easily by observing an interesting fact that all even digits have at least one character not present in any other strings, while all odd digits don’t:
Following digits have unique letters:
- zero: Only digit with z
- two: Only digit with w
- four: Only digit with u
- six: Only digit with x
- eight: Only digit with g
For the odd digits, every letter also appears in some other digit. Odd digits in words are {one, three, five, seven, nine}. Follow the steps given below to solve the problem
- Create a vector of strings num that will hold the numbers in English letter from 0 to 9 and a vector of integers, count[] of size 10 and also create an answer string ans to display the numbers.
- Now, traverse the given string from i = 0 to N-1.
- If s[i] = ‘z’, increase count[0] by 1.
- If s[i] = ‘w’, increase count[2] by 1.
- If s[i] = ‘g’, increase count[8] by 1.
- If s[i] = ‘x’, increase count[6] by 1.
- If s[i] = ‘v’, increase count[5] by 1.
- If s[i] = ‘o’, increase count[1] by 1.
- If s[i] = ‘s’, increase count[7] by 1.
- If s[i] = ‘f’, increase count[4] by 1.
- If s[i] = ‘h’, increase count[3] by 1.
- If s[i] = ‘i’, increase count[9] by 1.
- Now, update the elements of the vector as shown below:
- 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]).
- Now, traverse the vector from 0 to 9 and append character (i + ‘0’) to ans, count[i] times.
- Finally, print ans as the required answer.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string finddigits(string s)
{
string num[]
= { "zero" , "one" , "two" ,
"three" , "four" , "five" ,
"six" , "seven" , "eight" , "nine" };
vector< int > arr(10);
string ans = "" ;
int n = s.size();
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]++;
}
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]);
for ( int i = 0; i < 10; i++) {
for ( int j = 0; j < arr[i]; j++) {
ans += ( char )(i + '0' );
}
}
return ans;
}
int main()
{
string s = "owoftnuoer" ;
cout << finddigits(s) << endl;
}
|
Java
import java.io.*;
class GFG {
static String finddigits(String s)
{
String[] num
= { "zero" , "one" , "two" , "three" , "four" ,
"five" , "six" , "seven" , "eight" , "nine" };
int [] arr = new int [ 10 ];
String ans = "" ;
int n = s.length();
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 ]++;
}
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 ]);
for ( int i = 0 ; i < 10 ; i++) {
for ( int j = 0 ; j < arr[i]; j++) {
ans += ( char )(i + '0' );
}
}
return ans;
}
public static void main(String[] args)
{
String s = "owoftnuoer" ;
System.out.println(finddigits(s));
}
}
|
Python3
def finddigits(s):
num = [ "zero" , "one" , "two" , "three" ,
"four" , "five" , "six" , "seven" ,
"eight" , "nine" ]
arr = [ 0 ] * ( 10 )
ans = ""
n = len (s)
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
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 ])
for i in range ( 10 ):
for j in range (arr[i]):
ans + = chr ((i) + ord ( '0' ))
return ans
if __name__ = = '__main__' :
s = "owoftnuoer"
print (finddigits(s))
|
C#
using System;
public class GFG
{
static string finddigits( string s)
{
int [] arr = new int [10];
string ans = "" ;
int n = s.Length;
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]++;
}
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]);
for ( int i = 0; i < 10; i++) {
for ( int j = 0; j < arr[i]; j++) {
ans += ( char )(i + '0' );
}
}
return ans;
}
static public void Main()
{
string s = "owoftnuoer" ;
Console.WriteLine(finddigits(s));
}
}
|
Javascript
<script>
function finddigits(s)
{
let num = [ "zero" , "one" , "two" ,
"three" , "four" , "five" ,
"six" , "seven" , "eight" , "nine" ];
let arr = new Array(10).fill(0);
let ans = "" ;
let n = s.length;
for (let 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]++;
}
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]);
for (let i = 0; i < 10; i++) {
for (let j = 0; j < arr[i]; j++) {
ans += i;
}
}
return ans;
}
let s = "owoftnuoer" ;
document.write(finddigits(s), "</br>" );
</script>
|
Time Complexity: O(N) where N is the length of the string
Auxiliary Space: O(N)
Last Updated :
25 Feb, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...