Python: substrings de tamaño N con caracteres distintos K

Dada una string, la tarea es escribir un programa de Python para extraer strings de tamaño N y tener K caracteres distintos.

Ejemplos:

Entrada : test_str = ‘geeksforgeeksforgeeks’, N = 3, K = 2 
Salida : [‘gee’, ‘eek’, ‘gee’, ‘eek’, ‘gee’, ‘eek’] 
Explicación : 3 longitudes tienen 2 caracteres únicos se extraen.

Entrada : test_str = ‘geeksforgeeksforgeeks’, N = 4, K = 2 
Salida : [] 
Explicación : No hay strings con 4 longitudes y solo tiene 2 elementos. 

Método n.º 1: Usar rebanar + set() + bucle

En esto, realizamos la tarea de obtener N fragmentos mediante el corte, set() se usa para verificar elementos únicos. Loop se utiliza para iterar todos los fragmentos posibles.

Python3

# Python3 code to demonstrate working of
# N sized substrings with K distinct characters
# Using slicing + set() + loop
 
# initializing string
test_str = 'geeksforgeeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing N
N = 3
 
# initializing K
K = 2
 
res = []
for idx in range(0, len(test_str) - N + 1):
 
    # getting unique elements off sliced string
    if (len(set(test_str[idx: idx + N])) == K):
        res.append(test_str[idx: idx + N])
 
# printing result
print("Extracted Strings : " + str(res))
Producción

The original string is : geeksforgeeksforgeeks
Extracted Strings : ['gee', 'eek', 'gee', 'eek', 'gee', 'eek']

Método n.º 2: Usar comprensión de listas + len() + set() + corte

Similar al método anterior, la única diferencia es que se usa la comprensión de la lista en lugar del bucle, solo para proporcionar una abreviatura para resolver esta tarea.

Python3

# Python3 code to demonstrate working of
# N sized substrings with K distinct characters
# Using list comprehension + len() + set() + slicing
 
# initializing string
test_str = 'geeksforgeeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing N
N = 3
 
# initializing K
K = 2
 
# list comprehension used to slice
res = [test_str[idx: idx + N]
       for idx in range(0, len(test_str) - N + 1)
       if len(set(test_str[idx: idx + N])) == K]
 
# printing result
print("Extracted Strings : " + str(res))
Producción

The original string is : geeksforgeeksforgeeks
Extracted Strings : ['gee', 'eek', 'gee', 'eek', 'gee', 'eek']

La complejidad de tiempo y espacio para todos los métodos es la misma:

Complejidad de tiempo: O(n)

Complejidad espacial: O(n)

Publicación traducida automáticamente

Artículo escrito por manjeet_04 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 *