# 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 <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; 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*

*filter_none*

## 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; 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*

*filter_none*

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

# 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; 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*

*filter_none*

**Output:**

abca

## Recommended Posts:

- Lexicographically smallest string formed by appending a character from the first K characters of a given string
- Find a string such that every character is lexicographically greater than its immediate next character
- Lexicographically largest string formed from the characters in range L and R
- Find longest palindrome formed by removing or shuffling chars from string
- Lexicographically next greater string using same character set
- Character replacement after removing duplicates from a string
- Lexicographically smallest string whose hamming distance from given string is exactly K
- Minimize the length of string by removing occurrence of only one character
- Minimum sum of squares of character counts in a given string after removing k characters
- K-th lexicographically smallest unique substring of a given string
- Lexicographically smallest permutation of a string with given subsequences
- Lexicographically smallest string obtained after concatenating array
- Count of strings that can be formed from another string using each character at-most once
- Generate lexicographically smallest string of 0, 1 and 2 with adjacent swaps allowed
- Form lexicographically smallest string with minimum replacements having equal number of 0s, 1s and 2s

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.