Dada una string S. La tarea es imprimir la K-ésima lexicográficamente la más pequeña entre las diferentes substrings de s.
Una substring de s es una string que se obtiene eliminando una parte contigua no vacía en s.
Por ejemplo, si s = ababc, a, bab y ababc son substrings de s, mientras que ac, z y una string vacía no lo son. Además, decimos que las substrings son diferentes cuando son diferentes como strings.
Ejemplos:
Entrada: str = “aba”, k = 4
Salida: b
Todas las substrings únicas son a, ab, aba, b, ba.
Por lo tanto, la cuarta substring lexicográficamente más pequeña es b.Entrada: str = «geeksforgeeks», k = 5
Salida: eeksf
Enfoque: para una string arbitraria t, cada uno de sus sufijos propios es lexicográficamente más pequeño que t, y el rango lexicográfico de t es al menos |t|. Por lo tanto, la longitud de la respuesta es como máximo K.
Genere todas las substrings de s cuyas longitudes sean como máximo K. Ordénelas, únalas e imprima la K-ésima, donde N = |S|.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include<bits/stdc++.h> using namespace std; void kThLexString(string st, int k, int n) { // Set to store the unique substring set<string> z; for(int i = 0; i < n; i++) { // String to create each substring string pp; for(int j = i; j < i + k; j++) { if (j >= n) break; pp += st[j]; // Adding to set z.insert(pp); } } // Converting set into a list vector<string> fin(z.begin(), z.end()); // Sorting the strings int the list // into lexicographical order sort(fin.begin(), fin.end()); // Printing kth substring cout << fin[k - 1]; } // Driver code int main() { string s = "geeksforgeeks"; int k = 5; int n = s.length(); kThLexString(s, k, n); } // This code is contributed by yatinagg
Java
// Java implementation of // the above approach import java.util.*; class GFG{ public static void kThLexString(String st, int k, int n) { // Set to store the unique substring Set<String> z = new HashSet<String>(); for(int i = 0; i < n; i++) { // String to create each substring String pp = ""; for(int j = i; j < i + k; j++) { if (j >= n) break; pp += st.charAt(j); // Adding to set z.add(pp); } } // Converting set into a list Vector<String> fin = new Vector<String>(); fin.addAll(z); // Sorting the strings int the list // into lexicographical order Collections.sort(fin); // Printing kth substring System.out.print(fin.get(k - 1)); } // Driver Code public static void main(String[] args) { String s = "geeksforgeeks"; int k = 5; int n = s.length(); kThLexString(s, k, n); } } // This code is contributed by divyeshrabadiya07
Python3
# Python3 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)
C#
// C# implementation of // the above approach using System; using System.Collections.Generic; using System.Collections; class GFG{ public static void kThLexString(string st, int k, int n) { // Set to store the unique substring HashSet<string> z = new HashSet<string>(); for(int i = 0; i < n; i++) { // String to create each substring string pp = ""; for(int j = i; j < i + k; j++) { if (j >= n) break; pp += st[j]; // Adding to set z.Add(pp); } } // Converting set into a list ArrayList fin = new ArrayList(); foreach(string s in z) { fin.Add(s); } // Sorting the strings int the list // into lexicographical order fin.Sort(); // Printing kth substring Console.Write(fin[k - 1]); } // Driver Code public static void Main(string[] args) { string s = "geeksforgeeks"; int k = 5; int n = s.Length; kThLexString(s, k, n); } } // This code is contributed by rutvik_56
Javascript
<script> // JavaScript implementation of the above approach function kThLexString(st, k, n) { // Set to store the unique substring var z = new Set(); for(var i = 0; i < n; i++) { // String to create each substring var pp = ""; for(var j = i; j < i + k; j++) { if (j >= n) break; pp += st[j]; // Adding to set z.add(pp); } } var fin = []; z.forEach(element => { fin.push(element); }); fin.sort(); // Printing kth substring document.write( fin[k-1]); } // Driver code var s = "geeksforgeeks"; var k = 5; var n = s.length; kThLexString(s, k, n); </script>
eeksf