Dada una string str en la que se agrega un número entero al final (con o sin ceros a la izquierda). La tarea es encontrar un solo dígito del rango [0, 9] que debe agregarse al final del entero para que el número sea igual a la longitud de la string restante. Imprime -1 si no es posible.
Ejemplos:
Entrada: str = «geeksforgeeks1»
Salida: 3 La
longitud de «geeksforgeeks» es 13
Por lo tanto, se debe agregar 3 al final de 1.
Entrada: str = «abcd0»
Salida: 4
Enfoque: encuentre el número adjunto al final de la string, digamos num y agregue un 0 al final, que es el menor dígito posible, es decir , num = num * 10 . Ahora encuentre la longitud de la string restante ignorando el numérico del final, digamos len . Ahora el dígito que debe agregarse será digit = len – num . Si el dígito está en el rango [0, 9] , imprímalo; de lo contrario, imprima -1 .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the required digit int find_digit(string s, int n) { // To store the position of the first // numeric digit in the string int first_digit = -1; for (int i = n - 1; i >= 0; i--) { if (s[i] < '0' || s[i] > '9') { first_digit = i; break; } } first_digit++; // To store the length of the // string without the numeric // digits in the end int s_len = first_digit; // pw stores the current power of 10 // and num is to store the number // which is appended in the end int num = 0, pw = 1; int i = n - 1; while (i >= 0) { // If current character is // a numeric digit if (s[i] >= '0' && s[i] <= '9') { // Get the current digit int digit = s[i] - '0'; // Build the number num = num + (pw * digit); // If number exceeds the length if (num >= s_len) return -1; // Next power of 10 pw = pw * 10; } i--; } // Append 0 in the end num = num * 10; // Required number that must be added int req = s_len - num; // If number is not a single digit if (req > 9 || req < 0) return -1; return req; } // Driver code int main() { string s = "abcd0"; int n = s.length(); cout << find_digit(s, n); return 0; }
Java
// Java implementation of the approach import java.io.*; class GFG { // Function to return the required digit static int find_digit(String s, int n) { // To store the position of the first // numeric digit in the string int first_digit = -1; for (int i = n - 1; i >= 0; i--) { if (s.charAt(i) < '0' || s.charAt(i) > '9') { first_digit = i; break; } } first_digit++; // To store the length of the // string without the numeric // digits in the end int s_len = first_digit; // pw stores the current power of 10 // and num is to store the number // which is appended in the end int num = 0, pw = 1; int i = n - 1; while (i >= 0) { // If current character is // a numeric digit if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { // Get the current digit int digit = s.charAt(i) - '0'; // Build the number num = num + (pw * digit); // If number exceeds the length if (num >= s_len) return -1; // Next power of 10 pw = pw * 10; } i--; } // Append 0 in the end num = num * 10; // Required number that must be added int req = s_len - num; // If number is not a single digit if (req > 9 || req < 0) return -1; return req; } // Driver code public static void main (String[] args) { String s = "abcd0"; int n = s.length(); System.out.print(find_digit(s, n)); } } // This code is contributed by vt_m
Python3
# Python3 implementation of the approach # Function to return the required digit def find_digit(s, n): # To store the position of the first # numeric digit in the string first_digit = -1 for i in range(n - 1, -1, -1): if s[i] < '0' or s[i] > '9': first_digit = i break first_digit += 1 # To store the length of the # string without the numeric # digits in the end s_len = first_digit num = 0 pw = 1 i = n - 1 while i >= 0: # If current character is # a numeric digit if s[i] >= '0' and s[i] <= '9': # Get the current digit digit = ord(s[i]) - ord('0') # Build the number num = num + (pw * digit) # If number exceeds the length if num >= s_len: return -1 # Next power of 10 pw = pw * 10 i -= 1 # Append 0 in the end num = num * 10 # Required number that must be added req = s_len - num # If number is not a single digit if req > 9 or req < 0: return -1 return req # Driver code if __name__ == "__main__": s = "abcd0" n = len(s) print(find_digit(s, n)) # This code is contributed by # sanjeev2552
C#
// C# implementation of the approach using System; class GFG { // Function to return the required digit static int find_digit(String s, int n) { // To store the position of the first // numeric digit in the string int first_digit = -1, i; for (i = n - 1; i >= 0; i--) { if (s[i] < '0' || s[i] > '9') { first_digit = i; break; } } first_digit++; // To store the length of the // string without the numeric // digits in the end int s_len = first_digit; // pw stores the current power of 10 // and num is to store the number // which is appended in the end int num = 0, pw = 1; i = n - 1; while (i >= 0) { // If current character is // a numeric digit if (s[i] >= '0' && s[i] <= '9') { // Get the current digit int digit = s[i] - '0'; // Build the number num = num + (pw * digit); // If number exceeds the length if (num >= s_len) return -1; // Next power of 10 pw = pw * 10; } i--; } // Append 0 in the end num = num * 10; // Required number that must be added int req = s_len - num; // If number is not a single digit if (req > 9 || req < 0) return -1; return req; } // Driver code public static void Main (String[] args) { String s = "abcd0"; int n = s.Length; Console.Write(find_digit(s, n)); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // Javascript implementation of the approach // Function to return the required digit function find_digit(s, n) { // To store the position of the first // numeric digit in the string var first_digit = -1; for (var i = n - 1; i >= 0; i--) { if (s[i] < '0' || s[i] > '9') { first_digit = i; break; } } first_digit++; // To store the length of the // string without the numeric // digits in the end var s_len = first_digit; // pw stores the current power of 10 // and num is to store the number // which is appended in the end var num = 0, pw = 1; var i = n - 1; while (i >= 0) { // If current character is // a numeric digit if (s[i] >= '0' && s[i] <= '9') { // Get the current digit var digit = s[i] - '0'; // Build the number num = num + (pw * digit); // If number exceeds the length if (num >= s_len) return -1; // Next power of 10 pw = pw * 10; } i--; } // Append 0 in the end num = num * 10; // Required number that must be added var req = s_len - num; // If number is not a single digit if (req > 9 || req < 0) return -1; return req; } // Driver code var s = "abcd0"; var n = s.length; document.write( find_digit(s, n)); </script>
4
Complejidad de tiempo: O(n)
Espacio Auxiliar: O(1)