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(); 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.
Please Login to comment...