Given an alphanumeric string, extract maximum numeric value from that string. Alphabets will only be in lower case.
One approach to solving the problem is discussed here, other using Regular expressions is given in Set 2
Examples:
Input : 100klh564abc365bg Output : 564 Maximum numeric value among 100, 564 and 365 is 564. Input : abchsd0sdhs Output : 0
Its solution is simple i.e. Start traversing the string and perform two operations:
- 1) If a numeric value is present at the current index then convert it into an integer
num = num*10 + (str[i]-'0')
- 2) Otherwise, update the maximum value and reset num = 0.
Return the maximum value at the last.
// C++ program to extract the maximum value #include<bits/stdc++.h> using namespace std;
// Function to extract the maximum value int extractMaximum(string str)
{ int num = 0, res = 0;
// Start traversing the given string
for ( int i = 0; i<str.length(); i++)
{
// If a numeric value comes, start converting
// it into an integer till there are consecutive
// numeric digits
if (str[i] >= '0' && str[i] <= '9' )
num = num * 10 + (str[i]- '0' );
// Update maximum value
else
{
res = max(res, num);
// Reset the number
num = 0;
}
}
// Return maximum value
return max(res, num);
} // Driver program int main()
{ string str = "100klh564abc365bg" ;
cout << extractMaximum(str);
return 0;
} |
// Java program to extract the maximum value class GFG
{ // Method to extract the maximum value
static int extractMaximum(String str)
{
int num = 0 , res = 0 ;
// Start traversing the given string
for ( int i = 0 ; i<str.length(); i++)
{
// If a numeric value comes, start converting
// it into an integer till there are consecutive
// numeric digits
if (Character.isDigit(str.charAt(i)))
num = num * 10 + (str.charAt(i)- '0' );
// Update maximum value
else
{
res = Math.max(res, num);
// Reset the number
num = 0 ;
}
}
// Return maximum value
return Math.max(res, num);
}
// Driver method
public static void main(String[] args)
{
String str = "100klh564abc365bg" ;
System.out.println(extractMaximum(str));
}
} |
# Python 3 program to extract # the maximum value def extractMaximum(ss):
num, res = 0 , 0
# start traversing the given string
for i in range ( len (ss)):
if ss[i] > = "0" and ss[i] < = "9" :
num = num * 10 + int ( int (ss[i]) - 0 )
else :
res = max (res, num)
num = 0
return max (res, num)
# Driver Code ss = "100klh564abc365bg"
print (extractMaximum(ss))
# This code is contributed # by mohit kumar 29 |
// C# program to extract the maximum value using System;
class GFG {
// Method to extract the maximum value
static int extractMaximum(String str)
{
int num = 0, res = 0;
// Start traversing the given string
for ( int i = 0; i < str.Length; i++)
{
// If a numeric value comes, start
// converting it into an integer
// till there are consecutive
// numeric digits
if ( char .IsDigit(str[i]))
num = num * 10 + (str[i]- '0' );
// Update maximum value
else
{
res = Math.Max(res, num);
// Reset the number
num = 0;
}
}
// Return maximum value
return Math.Max(res, num);
}
// Driver method
public static void Main()
{
String str = "100klh564abc365bg" ;
Console.Write(extractMaximum(str));
}
} // This code is contributed by nitin mittal. |
<?php // PHP program to extract the maximum value // Function to extract the maximum value function extractMaximum( $str )
{ $num = 0;
$res = 0;
// Start traversing the given string
for ( $i = 0; $i < strlen ( $str ); $i ++)
{
// If a numeric value comes,
// start converting it into
// an integer till there are
// consecutive numeric digits
if ( $str [ $i ] >= '0' && $str [ $i ] <= '9' )
$num = $num * 10 + ( $str [ $i ]- '0' );
// Update maximum value
else
{
$res = max( $res , $num );
// Reset the number
$num = 0;
}
}
// Return maximum value
return max( $res , $num );
} // Driver Code
$str = "100klh564abc365bg" ;
echo extractMaximum( $str );
// This code is contributed by nitin mittal. ?> |
<script> // JavaScript program to extract // the maximum value // Method to extract the maximum value function extractMaximum(str)
{ var num = 0, res = 0;
// Start traversing the given string
for (i = 0; i<str.length; i++)
{
// If a numeric value comes,
// start converting
// it into an integer till
// there are consecutive
// numeric digits
if (isDigit(str.charAt(i)))
num = num * 10 +
(str.charAt(i).charCodeAt(0)-
'0' .charCodeAt(0));
// Update maximum value
else
{
res = Math.max(res, num);
// Reset the number
num = 0;
}
}
// Return maximum value
return Math.max(res, num);
} function isDigit(c) {
return c >= '0' && c <= '9' ;
}
// Driver method var str = "100klh564abc365bg" ;
document.write(extractMaximum(str)); // This code is contributed by Amit Katiyar </script> |
564
Time Complexity: O(n), where n is the size of the given string str
Auxiliary Space: O(1)
But in the case of large numbers above program wouldn’t work because of the integer range in C and C++. So, to handle the case of large numbers we have to take each numeric value as a separate string and then find the maximum value.
1) Start traversing the given string. Continue traversing if there are any leading zeroes or any lowercase character. b) Form a string of integer values. c) Update the maximum string. i) If the maximum string and current string are having equal lengths then on the basis of the first unmatched value return maximum string. ii) If both are having different lengths then return the string with greater length. 2) Return maximum string.
// C++ program for above implementation #include<bits/stdc++.h> using namespace std;
// Utility function to find maximum string string maximumNum(string curr_num, string res) { int len1 = curr_num.length();
int len2 = res.length();
// If both having equal lengths
if (len1 == len2)
{
// Reach first unmatched character / value
int i = 0;
while (curr_num[i]== res[i])
i++;
// Return string with maximum value
if (curr_num[i] < res[i])
return res;
else
return curr_num;
}
// If different lengths
// return string with maximum length
return len1 < len2 ? res: curr_num;
} // Function to extract the maximum value string extractMaximum(string str) { int n = str.length();
string curr_num = "" ;
string res;
// Start traversing the string
for ( int i = 0; i<n; i++)
{
// Ignore leading zeroes
while (i<n && str[i]== '0' )
i++;
// Store numeric value into a string
while (i<n && str[i]>= '0' && str[i]<= '9' )
{
curr_num = curr_num + str[i];
i++;
}
if (i == n)
break ;
if (curr_num.size() > 0)
i--;
// Update maximum string
res = maximumNum(curr_num, res);
curr_num = "" ;
}
// To handle the case if there is only
// 0 numeric value
if (curr_num.size()== 0 && res.size()== 0)
res = res + '0' ;
// Return maximum string
return maximumNum(curr_num, res);
} // Drivers program int main()
{ string str = "100klh564abc365bg" ;
cout << extractMaximum(str) << endl;
return 0;
} |
// Java program for above implementation class GFG
{ // Utility method to find maximum string
static String maximumNum(String curr_num, String res)
{
int len1 = curr_num.length();
int len2 = res.length();
// If both having equal lengths
if (len1 == len2)
{
// Reach first unmatched character / value
int i = 0 ;
while (curr_num.charAt(i) == res.charAt(i))
i++;
// Return string with maximum value
if (curr_num.charAt(i) < res.charAt(i))
return res;
else
return curr_num;
}
// If different lengths
// return string with maximum length
return len1 < len2 ? res: curr_num;
}
// Method to extract the maximum value
static String extractMaximum(String str)
{
int n = str.length();
String curr_num = "" ;
String res= "" ;
// Start traversing the string
for ( int i = 0 ; i<n; i++)
{
// Ignore leading zeroes
while (i<n && str.charAt(i)== '0' )
i++;
// Store numeric value into a string
while (i<n && Character.isDigit(str.charAt(i)))
{
curr_num = curr_num + str.charAt(i);
i++;
}
if (i == n)
break ;
if (curr_num.length() > 0 )
i--;
// Update maximum string
res = maximumNum(curr_num, res);
curr_num = "" ;
}
// To handle the case if there is only
// 0 numeric value
if (curr_num.length() == 0 && res.length() == 0 )
res = res + '0' ;
// Return maximum string
return maximumNum(curr_num, res);
}
// Driver method
public static void main(String[] args)
{
String str = "100klh564abc365bg" ;
System.out.println(extractMaximum(str));
}
} |
# Python3 program for above implementation # Utility function to find maximum string def maximumNum(curr_num, res):
len1 = len (curr_num);
len2 = len (res);
# If both having equal lengths
if (len1 = = len2):
# Reach first unmatched character / value
i = 0 ;
while (curr_num[i] = = res[i]):
i + = 1 ;
# Return string with maximum value
if (curr_num[i] < res[i]):
return res;
else :
return curr_num;
# If different lengths
# return string with maximum length
return res if (len1 < len2) else curr_num;
# Function to extract the maximum value def extractMaximum( str ):
n = len ( str );
curr_num = "";
res = "";
# Start traversing the string
for i in range (n):
# Ignore leading zeroes
while (i < n and str [i] = = '0' ):
i + = 1 ;
# Store numeric value into a string
while (i < n and str [i] > = '0' and str [i] < = '9' ):
curr_num + = str [i];
i + = 1 ;
if (i = = n):
break ;
if ( len (curr_num) > 0 ):
i - = 1 ;
# Update maximum string
res = maximumNum(curr_num, res);
curr_num = "";
# To handle the case if there is only
# 0 numeric value
if ( len (curr_num) = = 0 and len (res) = = 0 ):
res + = '0' ;
# Return maximum string
return maximumNum(curr_num, res);
# Driver Code str = "100klh564abc365bg" ;
print (extractMaximum( str ));
# This code is contributed by mits |
// C# program for above implementation using System;
class GFG
{ // Utility method to find maximum string
static String maximumNum( string curr_num, string res)
{
int len1 = curr_num.Length;
int len2 = res.Length;
// If both having equal lengths
if (len1 == len2)
{
// Reach first unmatched character / value
int i = 0;
while (curr_num[i] == res[i])
i++;
// Return string with maximum value
if (curr_num[i] < res[i])
return res;
else
return curr_num;
}
// If different lengths
// return string with maximum length
return len1 < len2 ? res: curr_num;
}
// Method to extract the maximum value
static string extractMaximum( string str)
{
int n = str.Length;
string curr_num = "" ;
string res= "" ;
// Start traversing the string
for ( int i = 0; i<n; i++)
{
// Ignore leading zeroes
while (i<n && str[i]== '0' )
i++;
// Store numeric value into a string
while (i<n && Char.IsDigit(str[i]))
{
curr_num = curr_num + str[i];
i++;
}
if (i == n)
break ;
if (curr_num.Length > 0)
i--;
// Update maximum string
res = maximumNum(curr_num, res);
curr_num = "" ;
}
// To handle the case if there is only
// 0 numeric value
if (curr_num.Length == 0 && res.Length == 0)
res = res + '0' ;
// Return maximum string
return maximumNum(curr_num, res);
}
// Driver method
public static void Main()
{
string str = "100klh564abc365bg" ;
Console.WriteLine(extractMaximum(str));
}
} // This code is contributed by mits |
<?php // PHP program for above implementation // Utility function to find maximum string function maximumNum( $curr_num , $res )
{ $len1 = strlen ( $curr_num );
$len2 = strlen ( $res );
// If both having equal lengths
if ( $len1 == $len2 )
{
// Reach first unmatched character / value
$i = 0;
while ( $curr_num [ $i ]== $res [ $i ])
$i ++;
// Return string with maximum value
if ( $curr_num [ $i ] < $res [ $i ])
return $res ;
else
return $curr_num ;
}
// If different lengths
// return string with maximum length
return $len1 < $len2 ? $res : $curr_num ;
} // Function to extract the maximum value function extractMaximum( $str )
{ $n = strlen ( $str );
$curr_num = "" ;
$res = "" ;
// Start traversing the string
for ( $i = 0; $i < $n ; $i ++)
{
// Ignore leading zeroes
while ( $i < $n && $str [ $i ]== '0' )
$i ++;
// Store numeric value into a string
while ( $i < $n && $str [ $i ]>= '0' && $str [ $i ]<= '9' )
{
$curr_num .= $str [ $i ];
$i ++;
}
if ( $i == $n )
break ;
if ( strlen ( $curr_num ) > 0)
$i --;
// Update maximum string
$res = maximumNum( $curr_num , $res );
$curr_num = "" ;
}
// To handle the case if there is only
// 0 numeric value
if ( strlen ( $curr_num )== 0 && strlen ( $res )== 0)
$res .= '0' ;
// Return maximum string
return maximumNum( $curr_num , $res );
} // Drivers program $str = "100klh564abc365bg" ;
echo extractMaximum( $str );
// this code is contributed by mits ?> |
<script> // JavaScript program for above implementation // Utility method to find maximum string
function maximumNum(curr_num,res)
{
let len1 = curr_num.length;
let len2 = res.length;
// If both having equal lengths
if (len1 == len2)
{
// Reach first unmatched character / value
let i = 0;
while (curr_num[i] == res[i])
i++;
// Return string with maximum value
if (curr_num[i] < res[i])
return res;
else
return curr_num;
}
// If different lengths
// return string with maximum length
return len1 < len2 ? res: curr_num;
}
// Method to extract the maximum value
function extractMaximum(str)
{
let n = str.length;
let curr_num = "" ;
let res= "" ;
// Start traversing the string
for (let i = 0; i<n; i++)
{
// Ignore leading zeroes
while (i<n && str[i]== '0' )
i++;
// Store numeric value into a string
while (i<n && !isNaN(String(str[i]) * 1))
{
curr_num = curr_num + str[i];
i++;
}
if (i == n)
break ;
if (curr_num.length > 0)
i--;
// Update maximum string
res = maximumNum(curr_num, res);
curr_num = "" ;
}
// To handle the case if there is only
// 0 numeric value
if (curr_num.length == 0 && res.length == 0)
res = res + '0' ;
// Return maximum string
return maximumNum(curr_num, res);
}
// Driver method
let str = "100klh564abc365bg" ;
document.write(extractMaximum(str));
// This code is contributed by unknown2108 </script> |
564
Time complexity : O(n) where n is the length of the input string. This is because each character of the string is being processed only once.
Space complexity : O(k) where k is the length of the largest numeric value present in the input string. This is because the largest numeric value is stored in a string, and the space required is proportional to its length.