Open In App

Lexicographically smallest string possible by inserting given character

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

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
Python
# 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#
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 - i);

                // 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));
    }
}
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>

Output
abcd

Time Complexity: O(len(str))
Auxiliary Space: O(1)


Similar Reads