Open In App

Largest possible number by deleting given digit

Last Updated : 19 Aug, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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>


Output

342

Time Complexity: O(N)
Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads