Dada una string alfanumérica, extraiga el valor numérico máximo de esa string. Los alfabetos solo estarán en minúsculas.
Aquí se discute un enfoque para resolver el problema, otro usando expresiones regulares se da en el Conjunto 2
Ejemplos:
Input : 100klh564abc365bg Output : 564 Maximum numeric value among 100, 564 and 365 is 564. Input : abchsd0sdhs Output : 0
Su solución es simple, es decir, comience a atravesar la string y realice dos operaciones:
- 1) Si un valor numérico está presente en el índice actual, conviértalo en un número entero
num = num*10 + (str[i]-'0')
- 2) De lo contrario, actualice el valor máximo y reinicie num = 0.
Devuelve el valor máximo en el último.
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
// 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)); } }
Python3
# 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#
// 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 // 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. ?>
Javascript
<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
Complejidad de tiempo: O(n) , donde n es el tamaño de la string dada str
Espacio auxiliar: O(1)
Pero en el caso de grandes números, el programa anterior no funcionaría debido al rango de enteros en C y C++. Entonces, para manejar el caso de números grandes, debemos tomar cada valor numérico como una string separada y luego encontrar el valor máximo.
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
// 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
# 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#
// 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 // 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 ?>
Javascript
<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
Este artículo es una contribución de Sahil Chhabra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA