Open In App

Extract maximum numeric value from a given string | Set 1 (General approach)

Last Updated : 15 Sep, 2023
Comments
Improve
Suggest changes
15 Likes
Like
Report

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++
// 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 Python3 C# PHP JavaScript

Output
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++
// 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 Python3 C# PHP JavaScript

Output
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.

 


Next Article
Article Tags :
Practice Tags :

Similar Reads