Append a digit in the end to make the number equal to the length of the remaining string

• Difficulty Level : Easy
• Last Updated : 11 Jun, 2021

Given a string str in which an integer is appended in the end (with or without leading zeroes). The task is to find a single digit from the range [0, 9] that must be appended in the end of the integer so that the number becomes equal to the length of remaining string. Print -1 if its not possible.
Examples:

Input: str = “geeksforgeeks1”
Output:
Length of “geeksforgeeks” is 13
So, 3 must be appended at the end of 1.
Input: str = “abcd0”
Output:

Approach: Find the number appended in the end of the string say num and append a 0 in the end which is the least digit possible i.e. num = num * 10. Now find the length of the remaining string ignoring the numeric from the end say len. Now the digit which must be appended will be digit = len – num. If digit is in the range [0, 9] then print it else print -1.
Below is the implementation of the above approach:

C++

 // C++ implementation of the approach#include using namespace std; // Function to return the required digitint 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 codeint main(){    string s = "abcd0";    int n = s.length();     cout << find_digit(s, n);     return 0;}

Java

 // Java implementation of the approachimport java.io.*; class GFG{ // Function to return the required digitstatic 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 codepublic 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 digitdef 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 codeif __name__ == "__main__":    s = "abcd0"    n = len(s)    print(find_digit(s, n)) # This code is contributed by# sanjeev2552

C#

 // C# implementation of the approachusing System;     class GFG{ // Function to return the required digitstatic 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 codepublic 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


Output:
4

My Personal Notes arrow_drop_up