# Smallest string which not a subsequence of the given string

• Difficulty Level : Medium
• Last Updated : 09 Jun, 2021

Given a string str, consisting of lowercase alphabets, the task is to find the shortest string which is not a subsequence of the given string. If multiple strings exist, then print any one of them.

Examples:

Input: str = “abaabcc”
Output:
Explanation:
One of the possible shortest string which is not a subsequence of the given string is “d”. Therefore, the required output is “d”.

Input: str = “abcdefghijklmnopqrstuvwxyzaabbccdd”
Output: ze

Approach: The problem can be solved using Greedy technique. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program to implement` `// the above approach`   `#include ` `using` `namespace` `std;`   `// Function to find shortest string which` `// not a subsequence of the given string` `string ShortestSubsequenceNotPresent(string str)` `{`   `    ``// Stores the shortest string which is` `    ``// not a subsequence of the given string` `    ``string shortestString;`   `    ``// Stores length of string` `    ``int` `N = str.length();`   `    ``// Stores distinct character of subsegments` `    ``unordered_set<``char``> subsegments;`   `    ``// Traverse the given string` `    ``for` `(``int` `i = 0; i < N; i++) {`   `        ``// Insert current character` `        ``// into subsegments` `        ``subsegments.insert(str[i]);`   `        ``// If all lowercase alphabets` `        ``// present in the subsegment` `        ``if` `(subsegments.size() == 26) {`   `            ``// Insert the last character of` `            ``// subsegment into shortestString` `            ``shortestString.push_back(str[i]);`   `            ``// Remove all elements from` `            ``// the current subsegment` `            ``subsegments.clear();` `        ``}` `    ``}`   `    ``// Traverse all lowercase alphabets` `    ``for` `(``char` `ch = ``'a'``; ch <= ``'z'``; ch++) {`   `        ``// If current character is not` `        ``// present in the subsegment` `        ``if` `(subsegments.count(ch) == 0) {` `            ``shortestString.push_back(ch);`   `            ``// Return shortestString` `            ``return` `shortestString;` `        ``}` `    ``}` `    ``return` `shortestString;` `}`   `// Driver Code` `int` `main()` `{`   `    ``// Given String` `    ``string str` `        ``= ``"abcdefghijklmnopqrstuvwxyzaabbccdd"``;`   `    ``cout << ShortestSubsequenceNotPresent(str);` `    ``return` `0;` `}`

## Java

 `// Java program to implement` `// the above approach`   `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG {` `    ``public` `static` `String` `    ``ShortestSubsequenceNotPresent(String str)` `    ``{` `        ``// Stores the shortest string which is` `        ``// not a subsequence of the given string` `        ``String shortestString = ``""``;`   `        ``// Stores length of string` `        ``int` `N = str.length();`   `        ``// Stores distinct character of subsegments` `        ``HashSet subsegments = ``new` `HashSet<>();`   `        ``// Traverse the given string` `        ``for` `(``int` `i = ``0``; i < N; i++) {`   `            ``// Insert current character` `            ``// into subsegments` `            ``subsegments.add(str.charAt(i));`   `            ``// If all lowercase alphabets` `            ``// present in the subsegment` `            ``if` `(subsegments.size() == ``26``) {`   `                ``// Insert the last character of` `                ``// subsegment into shortestString` `                ``shortestString` `                    ``= shortestString + str.charAt(i);`   `                ``// Remove all elements from` `                ``// the current subsegment` `                ``subsegments.clear();` `            ``}` `        ``}`   `        ``// Traverse all lowercase alphabets` `        ``for` `(``char` `ch = ``'a'``; ch <= ``'z'``; ch++) {`   `            ``// If current character is not` `            ``// present in the subsegment` `            ``if` `(!subsegments.contains(ch)) {` `                ``shortestString = shortestString + ch;`   `                ``// Return shortestString` `                ``return` `shortestString;` `            ``}` `        ``}` `        ``return` `shortestString;` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``String str = ``"abcdefghijklmnopqrstuvwxyzaabbccdd"``;`   `        ``System.out.print(` `            ``ShortestSubsequenceNotPresent(str));` `    ``}` `}` `// This code is contributed by Manu Pathria`

## Python3

 `# Python3 program to implement` `# the above approach`   `# Function to find shortest string which` `# not a subsequence of the given string` `def` `ShortestSubsequenceNotPresent(``Str``):`   `    ``# Stores the shortest string which is` `    ``# not a subsequence of the given string` `    ``shortestString ``=` `""`   `    ``# Stores length of string` `    ``N ``=` `len``(``Str``)`   `    ``# Stores distinct character of subsegments` `    ``subsegments ``=` `set``()`   `    ``# Traverse the given string` `    ``for` `i ``in` `range``(N):`   `        ``# Insert current character` `        ``# into subsegments` `        ``subsegments.add(``Str``[i])`   `        ``# If all lowercase alphabets` `        ``# present in the subsegment` `        ``if` `(``len``(subsegments) ``=``=` `26``) :`   `            ``# Insert the last character of` `            ``# subsegment into shortestString` `            ``shortestString ``+``=` `Str``[i]`   `            ``# Remove all elements from` `            ``# the current subsegment` `            ``subsegments.clear()` `        `  `    ``# Traverse all lowercase alphabets` `    ``for` `ch ``in` `range``(``int``(``26``)):` `        `  `        ``# If current character is not` `        ``# present in the subsegment` `        ``if` `(``chr``(ch ``+` `97``) ``not` `in` `subsegments) :` `            `  `            ``shortestString ``+``=` `chr``(ch ``+` `97``)` `            `  `            ``# Return shortestString` `            ``return` `shortestString` `    `  `    ``return` `shortestString`   `# Driver code` `# Given String` `Str` `=` `"abcdefghijklmnopqrstuvwxyzaabbccdd"`   `print``(ShortestSubsequenceNotPresent(``Str``))`   `# This code is contributed by divyeshrabadiya07`

## C#

 `// C# program to implement` `// the above approach` `using` `System;` `using` `System.Collections.Generic;`   `class` `GFG{` `    `  `public` `static` `String ShortestSubsequenceNotPresent(` `    ``String str)` `{` `    `  `    ``// Stores the shortest string which is` `    ``// not a subsequence of the given string` `    ``String shortestString = ``""``;`   `    ``// Stores length of string` `    ``int` `N = str.Length;`   `    ``// Stores distinct character of subsegments` `    ``HashSet<``char``> subsegments = ``new` `HashSet<``char``>();`   `    ``// Traverse the given string` `    ``for``(``int` `i = 0; i < N; i++)` `    ``{` `        `  `        ``// Insert current character` `        ``// into subsegments` `        ``subsegments.Add(str[i]);`   `        ``// If all lowercase alphabets` `        ``// present in the subsegment` `        ``if` `(subsegments.Count == 26)` `        ``{` `            `  `            ``// Insert the last character of` `            ``// subsegment into shortestString` `            ``shortestString = shortestString + str[i];` `            `  `            ``// Remove all elements from` `            ``// the current subsegment` `            ``subsegments.Clear();` `        ``}` `    ``}`   `    ``// Traverse all lowercase alphabets` `    ``for``(``char` `ch = ``'a'``; ch <= ``'z'``; ch++) ` `    ``{` `        `  `        ``// If current character is not` `        ``// present in the subsegment` `        ``if` `(!subsegments.Contains(ch))` `        ``{` `            ``shortestString = shortestString + ch;` `            `  `            ``// Return shortestString` `            ``return` `shortestString;` `        ``}` `    ``}` `    ``return` `shortestString;` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `    ``String str = ``"abcdefghijklmnopqrstuvwxyzaabbccdd"``;` `    `  `    ``Console.Write(` `        ``ShortestSubsequenceNotPresent(str));` `}` `}`   `// This code is contributed by Rajput-Ji`

## Javascript

 ``

Output

`ze`

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :