Explicación algoritmo
Publicado por Toni (35 intervenciones) el 02/04/2019 09:11:05
Hola,
un compañero me ha ayudado con el algoritmo de un programa, pero no lo acabo de entender. El algoritmo a resolver es el siguiente:
Hay que escribir una función (def) donde, dada una cadena s y un número entero k, devuelva las n / k subcadenas, teniendo en cuenta los siguientes requisitos:
- el orden de los caracteres en las subcadenas debe ser el mismo que en la cadena original.
- todos los caracteres de las subcadenas deben aparecer una única vez. Es decir, si un carácter se repite dentro de una subcadena, sólo hay que mostrar la primera aparición.
Por ejemplo, si tenemos:
s = AABCCAADA
k = 3
Tenemos que la longitud de la cadena es 9, con lo que podemos formar 3 subcadenas:
- AAB, que pasaría a ser AB (el carácter A se repite dos veces)
- CCA, que pasaría a ser CA (el carácter C se repite dos veces)
- ADA, que pasaría a ser AD (el carácter A se repite dos veces)
El algoritmo es el siguiente:
def split(s, k):
sub = len(s) // k
result = [''] * k
for i in range(sub):
for j in range(k):
if s[k*i+j] not in result[i]:
result[i] += s[k*i+j]
return result
¿Alguien podría explicarme qué hace cada línea del algoritmo?
Muchas gracias
un compañero me ha ayudado con el algoritmo de un programa, pero no lo acabo de entender. El algoritmo a resolver es el siguiente:
Hay que escribir una función (def) donde, dada una cadena s y un número entero k, devuelva las n / k subcadenas, teniendo en cuenta los siguientes requisitos:
- el orden de los caracteres en las subcadenas debe ser el mismo que en la cadena original.
- todos los caracteres de las subcadenas deben aparecer una única vez. Es decir, si un carácter se repite dentro de una subcadena, sólo hay que mostrar la primera aparición.
Por ejemplo, si tenemos:
s = AABCCAADA
k = 3
Tenemos que la longitud de la cadena es 9, con lo que podemos formar 3 subcadenas:
- AAB, que pasaría a ser AB (el carácter A se repite dos veces)
- CCA, que pasaría a ser CA (el carácter C se repite dos veces)
- ADA, que pasaría a ser AD (el carácter A se repite dos veces)
El algoritmo es el siguiente:
def split(s, k):
sub = len(s) // k
result = [''] * k
for i in range(sub):
for j in range(k):
if s[k*i+j] not in result[i]:
result[i] += s[k*i+j]
return result
¿Alguien podría explicarme qué hace cada línea del algoritmo?
Muchas gracias
Valora esta pregunta


0