Agregue un dígito al final para que el número sea igual a la longitud de la string restante

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:
 

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>
Producción: 

4

 

Complejidad de tiempo: O(n)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por gp6 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *