K-ésima substring única lexicográficamente más pequeña de una string dada

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:
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>
Producción: 

eeksf

 

Publicación traducida automáticamente

Artículo escrito por indrajit1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *