Lexicographically smallest string formed by removing at most one character

Given a string str, the task is to find the lexicographically smallest string that can be formed by removing at most one character from the given string.


Examples:

Input: str = "abcda"  
Output: abca
One can remove 'd' to get "abca" which is 
the lexicographically smallest string possible. 

Input: str = "aaa' 
Output: aa 

Approach: Traverse the string and delete the i-th character at the first point where s[i]>s[i+1]. If in case there is no such character then delete the last character in the string.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the lexicographically
// smallest string by removing at most one character
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the smallest string
string smallest(string s)
{
    int l = s.length();
    string ans = "";
  
    // iterate the string
    for (int i = 0; i < l-1; i++) {
  
        // first point where s[i]>s[i+1]
        if (s[i] > s[i + 1]) {
  
            // append the string without
            // i-th character in it
            for (int j = 0; j < l; j++) {
                if (i != j)
                    ans += s[j];
            }
            return ans;
        }
    }
  
    // leave the last character
    ans = s.substr(0., l - 1);
    return ans;
}
  
// Driver Code
int main()
{
    string s = "abcda";
  
    cout << smallest(s);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the lexicographically 
// smallest String by removing at most one character 
  
class GFG {
  
// Function to return the smallest String 
    static String smallest(String s) {
        int l = s.length();
        String ans = "";
  
        // iterate the String 
        for (int i = 0; i < l-1; i++) {
  
            // first point where s[i]>s[i+1] 
            if (s.charAt(i) > s.charAt(i + 1)) {
  
                // append the String without 
                // i-th character in it 
                for (int j = 0; j < l; j++) {
                    if (i != j) {
                        ans += s.charAt(j);
                    }
                }
                return ans;
            }
        }
  
        // leave the last character 
        ans = s.substring(0, l - 1);
        return ans;
    }
  
// Driver Code 
    public static void main(String[] args) {
  
        String s = "abcda";
        System.out.println(smallest(s));
    }
}
/* This code is contributed by 29AjayKumar*/

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the lexicographically
# smallest string by removing at most one character
  
# Function to return the smallest string
def smallest(s):
  
    l = len(s)
    ans = ""
  
    # iterate the string
    for i in range (l):
  
        # first point where s[i]>s[i+1]
        if (s[i] > s[i + 1]):
  
            # append the string without
            # i-th character in it
            for j in range (l):
                if (i != j):
                    ans += s[j]
              
            return ans
  
    # leave the last character
    ans = s[0: l - 1]
    return ans
  
# Driver Code
if __name__ == "__main__":
  
    s = "abcda"
  
    print (smallest(s))
  
# This code is contributed by ita_c

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the lexicographically 
// smallest String by removing at most
// one character 
using System;
  
class GFG
{
  
// Function to return the 
// smallest String 
static String smallest(String s) 
{
    int l = s.Length;
    String ans = "";
  
    // iterate the String 
    for (int i = 0; i < l-1; i++) 
    {
  
        // first point where s[i]>s[i+1] 
        if (s[i] > s[i + 1]) 
        {
  
            // append the String without 
            // i-th character in it 
            for (int j = 0; j < l; j++) 
            {
                if (i != j) 
                {
                    ans += s[j];
                }
            }
            return ans;
        }
    }
  
    // leave the last character 
    ans = s.Substring(0, l - 1);
    return ans;
}
  
// Driver Code 
public static void Main() 
{
    String s = "abcda";
    Console.Write(smallest(s));
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

abca

competitive-programming-img




My Personal Notes arrow_drop_up

Recommended Posts:


Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.