Get the best out of our app
GeeksforGeeks App
Open App
Browser
Continue

# 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++

 `// C++ program to find the lexicographically``// smallest string by removing at most one character``#include ``using` `namespace` `std;` `// Function to return the smallest string``string smallest(string s)``{``    ``int` `l = s.length();``      ``bool` `flag=``false``; ``//to check if we can get lexicographically smallest string by removing one character``    ``string ans = ``""``; ``// to store resultant string``      ``int` `index=-1;``// to store index required to be deleted``    ``for` `(``int` `i = 0; i < l-1; i++) {``        ``// first point where s[i]>s[i+1]``        ``if` `(s[i] > s[i + 1]) {``          ``flag=``true``;``          ``index=i;``          ``break``;``        ``}``    ``}``      ``if``(flag==``false``)``    ``{``      ``ans=s;``      ``return` `ans;``    ``}``    ``//Storing resultant string``      ``for` `(``int` `j = 0; j < l; j++) {``         ``if` `(index != j)``           ``ans += s[j];``           ``}``    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``string s = ``"abcda"``;``    ``cout << smallest(s);``    ``return` `0;``}`

## Java

 `// 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*/`

## Python3

 `# 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``-``1``):` `        ``# 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`

## C#

 `// 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`

## Javascript

 ``

Output

`abca`

Complexity Analysis:

• Time complexity: O(n) where n is the length of the string
• Auxiliary Space: O(n) since we are storing the answer in form of string.

My Personal Notes arrow_drop_up