# Lexicographically smallest string which is not a subsequence of given string

• Last Updated : 14 Mar, 2022

Given a string S, the task is to find the string which is lexicographically smallest and not a subsequence of the given string S.

Examples:

Input: S = “abcdefghijklmnopqrstuvwxyz”
Output:
aa
Explanation:
String “aa” is the lexicographically smallest string which is not present in the given string as a subsequence.

Input: S = “aaaa”
Output:
aaab
Explanation:
String “aaa” is the lexicographically smallest string which is not present in the given string as a subsequence.

Approach: The idea is to solve the given problem is to find the frequency of the character ‘a’ in the given string (say f). If the value of f is less than the length of the string, then the answer would be the string formed by concatenating ‘a’ f+1 number of times as aaa….(f+1 times) will be the required lexicographically smallest string which is not a subsequence. Otherwise, the answer would be the string formed by concatenating ‘a’ (f-1 times) and ‘b’ at the end of the string.

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;``// Function to find lexicographically smallest string that``// is not a subsequence of S``string smallestNonSubsequence(string S, ``int` `N)``{``    ``// variable to store frequency of 'a'``    ``int` `freq = 0;``    ``// calculate frequency of 'a'``    ``for` `(``int` `i = 0; i < N; i++)``        ``if` `(S[i] == ``'a'``)``            ``freq++;``    ``// Initialize string consisting of freq number of 'a'``    ``string ans(freq, ``'a'``);``    ``// change the last digit to 'b'``    ``if` `(freq == N)``        ``ans[freq - 1] = ``'b'``;``    ``// add another 'a' to the string``    ``else``        ``ans += ``'a'``;``    ``// return the answer string``    ``return` `ans;``}``// Driver code``int` `main()``{``    ``// Input``    ``string S = ``"abcdefghijklmnopqrstuvwxyz"``;``    ``int` `N = S.length();` `    ``// Function call``    ``cout << smallestNonSubsequence(S, N) << endl;``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;``public` `class` `GFG``{` `// Function to find lexicographically smallest string that``// is not a subsequence of S``static` `String smallestNonSubsequence(String S, ``int` `N)``{``  ` `    ``// variable to store frequency of 'a'``    ``int` `freq = ``0``;``  ` `    ``// calculate frequency of 'a'``    ``for` `(``int` `i = ``0``; i < N; i++)``        ``if` `(S.charAt(i) == ``'a'``)``            ``freq++;``  ` `    ``// Initialize string consisting of freq number of 'a'`` ``String ans=``""``;``    ``for``(``int` `i = ``0``; i < f req; i++){``        ``ans += ``'a'``;``    ``}``  ` `    ``// change the last digit to 'b'``    ``if` `(freq == N)``       ``ans = ans.replace(ans.charAt(freq - ``1``), ``'b'``);``  ` `    ``// add another 'a' to the string``    ``else``        ``ans += ``'a'``;``  ` `    ``// return the answer string``    ``return` `ans;``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``String S = ``"abcdefghijklmnopqrstuvwxyz"``;``    ``int` `N = S.length();` `    ``// Function call``    ``System.out.println(smallestNonSubsequence(S, N));``    ``}``}` `// This code is contributed by SoumikMondal`

## Python3

 `# Python3 program for the above approach` `# Function to find lexicographically smallest``# string that is not a subsequence of S``def` `smallestNonSubsequence(S, N):``    ` `    ``# Variable to store frequency of 'a'``    ``freq ``=` `0``    ` `    ``# Calculate frequency of 'a'``    ``for` `i ``in` `range``(N):``        ``if` `(S[i] ``=``=` `'a'``):``            ``freq ``+``=` `1``            ` `    ``# Initialize string consisting``    ``# of freq number of 'a'``    ``ans ``=` `""``    ``for` `i ``in` `range``(freq):``        ``ans ``+``=` `'a'` `    ``# Change the last digit to 'b'``    ``if` `(freq ``=``=` `N):``        ``ans ``=` `ans.replace(ans[freq ``-` `1``], ``'b'``)``        ` `    ``# Add another 'a' to the string``    ``else``:``        ``ans ``+``=` `'a'``        ` `    ``# Return the answer string``    ``return` `ans` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``# Input``    ``S ``=` `"abcdefghijklmnopqrstuvwxyz"``    ``N ``=` `len``(S)` `    ``# Function call``    ``print``(smallestNonSubsequence(S, N))``    ` `# This code is contributed by SURENDRA_GANGWAR`

## Javascript

 ``

Output

`aa`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up