Lexicographically smallest string possible by inserting given character
Given a string S and a character C, the task is to place a character in the string in such a way that the string obtained is the lexicographically smallest string.
Examples:
Input: S = “acd”, C = ‘b’
Output: “abcd”
Explanation: The possible strings formed by placing the character C in string at different indices are [“bacd”, “abcd”, “acbd”, “acdb”]
The lexicographically smallest string obtained is “abcd”.Input: S = “abcd”, C=’e’
Output: “abcde”
Explanation: The possible strings formed by placing the character C in string at different indices are {“eabcd”, “aebcd”, “abecd”, “abced”, “abcde”}.
The lexicographically smallest string is “abcde”.
Approach: The idea is to place the character just before the first character which is lexicographically greater than the character C in the string. If no character in the string is found to be greater than C, insert the character at the end.
Below is the implementation of the above approach:
C++
// C++ Program to implement the // above approach #include <bits/stdc++.h> using namespace std; // Function to obtain lexicographically // smallest string possible by inserting // character c in the string s string SmallestString(string s, char c) { // Traverse the string for ( int i = 0; i < s.size(); i++) { // If the current character is greater // than the given character if (s[i] > c) { // Insert the character before // the greater character s.insert(i, 1, c); // Return the string return s; } } // Append the character at the end s += c; // Return the string return s; } // Driver Code int main() { string S = "acd" ; char C = 'b' ; cout << SmallestString(S, C) << endl; return 0; } |
Java
// Java program to implement the // above approach import java.util.*; class GFG{ // Function to obtain lexicographically // smallest String possible by inserting // character c in the String s static String SmallestString(String s, char c) { // Traverse the String for ( int i = 0 ; i < s.length(); i++) { // If the current character is greater // than the given character if (s.charAt(i) > c) { // Insert the character before // the greater character String temp = s; s = s.substring( 0 , i); s += c; s += temp.substring(i, temp.length()); // Return the String return s; } } // Append the character at the end s += c; // Return the String return s; } // Driver Code public static void main(String args[]) { String S = "acd" ; char C = 'b' ; System.out.println(SmallestString(S, C)); } } // This code is contributed by ipg2016107 |
Python3
# Python3 Program to implement # the above approach # Function to obtain lexicographically # smallest string possible by inserting # character c in the string s def SmallestString(s, c): i = 0 # Traverse the string while (i < len (s)): # Check if current character is # greater than the given character if s[i] > c: # Insert the character before # the first greater character s = s[:i] + c + s[i:] # Return the string return s i = i + 1 # Append the character at the end s = s + c # Return the string return s S = 'abd' C = 'c' # Function call print (SmallestString(S, C)) |
C#
// C# program to implement the // above approach using System; class GFG{ // Function to obtain lexicographically // smallest String possible by inserting // character c in the String s static String SmallestString(String s, char c) { // Traverse the String for ( int i = 0; i < s.Length; i++) { // If the current character is greater // than the given character if (s[i] > c) { // Insert the character before // the greater character String temp = s; s = s.Substring(0, i); s += c; s += temp.Substring(i, temp.Length - 1); // Return the String return s; } } // Append the character at the end s += c; // Return the String return s; } // Driver Code public static void Main(String []args) { String S = "acd" ; char C = 'b' ; Console.WriteLine(SmallestString(S, C)); } } // This code is contributed by aashish1995 |
Javascript
<script> // javascript program to implement // the above approach // Function to obtain lexicographically // smallest String possible by inserting // character c in the String s function SmallestString(s, c) { // Traverse the String for (let i = 0; i < s.length; i++) { // If the current character is greater // than the given character if (s[i] > c) { // Insert the character before // the greater character let temp = s; s = s.substring(0, i); s += c; s += temp.substring(i, temp.length); // Return the String return s; } } // Append the character at the end s += c; // Return the String return s; } // Driver code let S = "acd" ; let C = 'b' ; document.write(SmallestString(S, C)); // This code is contributed by splevel62. </script> |
abcd
Time Complexity: O(len(str))
Auxiliary Space: O(1)
Please Login to comment...