Append a digit in the end to make the number equal to the length of the remaining string
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: 3
Length of “geeksforgeeks” is 13
So, 3 must be appended at the end of 1.
Input: str = “abcd0”
Output: 4
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 <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
Time Complexity: O(n)
Auxiliary Space: O(1)
Please Login to comment...