Find the largest positive integer that can be formed by deleting only one occurrence of a given digit.
Examples:
Input: num = 56321, digit = 5
Output: 6321
Explanation: Since the number 56321 contain only 1 occurrence of 5, we can remove it to get 6321 which is the largest possible positive number.Input: num = 936230, digit = 3
Output: 96230
Explanation: Since the number 936230 contain 2 occurrences of 3, we can remove either 1st occurrence to get 96230 or remove 2nd occurrence to get 93620. Among the both, 96230 is the largest possible positive number.
Approach: The problem can be solved based on the following idea:
To find the maximum number, delete an occurrence in such a position where the next digit is greater than it. Because then the number formed will be large. Such a position should be as close to left as possible for higher values.
Follow the steps mentioned below to implement the idea:
- Remove the leftmost occurrence of X if it’s followed by a larger digit.Â
- If no occurrence of X is followed by a digit greater than X then remove the last occurrence of the digit.
Below is the implementation of the above approach.
C++
#include <bits/stdc++.h> using namespace std; Â
string removeX(string N, char X) {        // Stores the index of X     // that has to be removed     int index = -1; Â
    // Find leftmost occurrence of X     // such that the digit just after X     // is greater than X     for ( int i = 0; i < N.length() - 1; i++) {         if (N[i] == X && N[i] - '0' < N[i + 1] - '0' ) { Â
            // Update index and break             index = i;             break ;         }     } Â
    // If no occurrence of X such that     // the digit just after X     // is greater than X is found     // then find last occurrence of X     if (index == -1) {         for ( int i = N.length() - 1; i >= 0; i--) {             if (N[i] == X) {                 index = i;                 break ;             }         }     } Â
    // Construct answer using all characters     // in string N except index     string ans = "" ;     for ( int i = 0; i < N.length(); i++) {         if (i != index)             ans = ans + N[i];     } Â
    return ans; } Â
int main() { Â
    string N = "2342" ;     char X = '2' ;     cout << removeX(N, X) << endl;     return 0; } Â
// This code is contributed by Ishan Khandelwal |
Java
// Java code to implement the approach Â
import java.io.*; Â
class GFG {        // Function to find the largest number     public static String removeX(String N, char X)     {         // Stores the index of X         // that has to be removed         int index = - 1 ; Â
        // Find leftmost occurrence of X         // such that the digit just after X         // is greater than X         for ( int i = 0 ; i < N.length() - 1 ;              i++) {             if (N.charAt(i) == X                 && N.charAt(i) - '0'                     < N.charAt(i + 1 ) - '0' ) {                                  // Update index and break                 index = i;                 break ;             }         } Â
        // If no occurrence of X such that         // the digit just after X         // is greater than X is found         // then find last occurrence of X         if (index == - 1 ) {             for ( int i = N.length() - 1 ;                  i >= 0 ; i--) {                 if (N.charAt(i) == X) {                     index = i;                     break ;                 }             }         } Â
        // Construct answer using all characters         // in string N except index         String ans = "" ;         for ( int i = 0 ; i < N.length(); i++) {             if (i != index)                 ans = ans + N.charAt(i);         } Â
        return ans;     }        // Driver code     public static void main(String[] args)     {         String N = "2342" ;         char X = '2' ;                // Function call         System.out.println(removeX(N, X));     } } |
Python3
# Python code to implement the approach def removeX(N, X):        # Stores the index of X     # that has to be removed     index = - 1 ; Â
    # Find leftmost occurrence of X     # such that the digit just after X     # is greater than X     for i in range ( len (N) - 1 ):         if (N[i] = = X and ord (N[i]) - ord ( '0' ) < ord (N[i + 1 ]) - ord ( '0' )): Â
            # Update index and break             index = i;             break ; Â
    # If no occurrence of X such that     # the digit just after X     # is greater than X is found     # then find last occurrence of X     if (index = = - 1 ):         for i in range ( len (N), - 1 , - 1 ):             if (N[i] = = X):                 index = i;                 break ;              Â
    # Construct answer using all characters     # in string N except index     ans = "";     for i in range ( len (N)):         if (i ! = index):             ans = ans + N[i];      Â
    return ans; Â
N = "2342" ; X = '2' ; print (removeX(N, X)); Â
# This code is contributed by Saurabh Jaiswal |
C#
// C# program for the above approach using System; using System.Collections.Generic; Â
class GFG { Â
  // Function to find the largest number   public static string removeX( string N, char X)   {     // Stores the index of X     // that has to be removed     int index = -1; Â
    // Find leftmost occurrence of X     // such that the digit just after X     // is greater than X     for ( int i = 0; i < N.Length - 1;          i++) {       if (N[i] == X           && N[i] - '0'           < N[i + 1] - '0' ) { Â
        // Update index and break         index = i;         break ;       }     } Â
    // If no occurrence of X such that     // the digit just after X     // is greater than X is found     // then find last occurrence of X     if (index == -1) {       for ( int i = N.Length - 1;            i >= 0; i--) {         if (N[i] == X) {           index = i;           break ;         }       }     } Â
    // Construct answer using all characters     // in string N except index     string ans = "" ;     for ( int i = 0; i < N.Length; i++) {       if (i != index)         ans = ans + N[i];     } Â
    return ans;   } Â
  // Driver Code   public static void Main()   {     string N = "2342" ;     char X = '2' ; Â
    // Function call     Console.Write(removeX(N, X));   } } Â
// This code is contributed by sanjoy_62. |
Javascript
<script> // Javascript code to implement the approach function removeX(N, X) {        // Stores the index of X     // that has to be removed     let index = -1; Â
    // Find leftmost occurrence of X     // such that the digit just after X     // is greater than X     for (let i = 0; i < N.length - 1; i++) {         if (N[i] == X && N[i] - '0' < N[i + 1] - '0' ) { Â
            // Update index and break             index = i;             break ;         }     } Â
    // If no occurrence of X such that     // the digit just after X     // is greater than X is found     // then find last occurrence of X     if (index == -1) {         for (let i = N.length - 1; i >= 0; i--) {             if (N[i] == X) {                 index = i;                 break ;             }         }     } Â
    // Construct answer using all characters     // in string N except index     let ans = "" ;     for (let i = 0; i < N.length; i++) {         if (i != index)             ans = ans + N[i];     } Â
    return ans; } Â
let N = "2342" ; let X = '2' ; document.write(removeX(N, X)); Â
// This code is contributed by Samim Hossain Mondal. </script> |
342
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!