# K-th lexicographically smallest unique substring of a given string

Given a string S. The task is to print the K-th lexicographically smallest one among the different substrings of s.

A substring of s is a string obtained by taking out a non-empty contiguous part in s.

For example, if s = ababc, a, bab and ababc are substrings of s, while ac, z and an empty string are not. Also, we say that substrings are different when they are different as strings.

**Examples:**

Input:str = “aba”, k = 4

Output:b

All unique substrings are a, ab, aba, b, ba.

Thus the 4th lexicographically smallest substring is b.

Input:str = “geeksforgeeks”, k = 5

Output:eeksf

**Approach:** For an arbitrary string t, each of its proper suffix is lexicographically smaller than t, and the lexicographic

rank of t is at least |t|. Thus, the length of the answer is at most K.

Generate all substrings of s whose lengths are at most K. Sort them, unique them, and print the K-th one, where N = |S|.

Below is the implementation of the above approach:

`# Python implementation of the above approach ` `def` `kThLexString(st, k, n): ` ` ` `# Set to store the unique substring ` ` ` `z ` `=` `set` `() ` ` ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `# String to create each substring ` ` ` `pp ` `=` `"" ` ` ` ` ` `for` `j ` `in` `range` `(i, i ` `+` `k): ` ` ` ` ` `if` `(j >` `=` `n): ` ` ` ` ` `break` ` ` ` ` `pp ` `+` `=` `s[j] ` ` ` `# adding to set ` ` ` `z.add(pp) ` ` ` ` ` `# converting set into a list ` ` ` `fin ` `=` `list` `(z) ` ` ` ` ` `# sorting the strings int the list ` ` ` `# into lexicographical order ` ` ` `fin.sort() ` ` ` ` ` `# printing kth substring ` ` ` `print` `(fin[k ` `-` `1` `]) ` ` ` ` ` `s ` `=` `"geeksforgeeks"` ` ` `k ` `=` `5` ` ` `n ` `=` `len` `(s) ` `kThLexString(s, k, n) ` |

*chevron_right*

*filter_none*

**Output:**

eeksf

## Recommended Posts:

- Lexicographically smallest and largest substring of size k
- Lexicographically smallest substring with maximum occurrences containing a's and b's only
- Check if string can be made lexicographically smaller by reversing any substring
- Lexicographically smallest string formed by appending a character from first K characters of a string | Set 2
- Lexicographically smallest string formed by appending a character from the first K characters of a given string
- Find the longest substring with k unique characters in a given string
- Lexicographically smallest string whose hamming distance from given string is exactly K
- Lexicographically smallest string of length N and sum K
- Lexicographically smallest permutation of a string with given subsequences
- Queries to answer the X-th smallest sub-string lexicographically
- Find the lexicographically smallest string which satisfies the given condition
- Lexicographically smallest string obtained after concatenating array
- Lexicographically smallest string formed by removing at most one character
- Swap all occurrences of two characters to get lexicographically smallest string
- Generate lexicographically smallest string of 0, 1 and 2 with adjacent swaps allowed

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.