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();
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
<script> // Javascript program to find the lexicographically // smallest String by removing at most one character // Function to return the smallest String
function smallest(s)
{
let l = s.length;
let ans = "" ;
// iterate the String
for (let 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 (let 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
let s = "abcda" ;
document.write(smallest(s));
// This code is contributed by rag2127 </script> |
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.