Estoy publicando mis soluciones a los desafíos de HackerRank como una forma de mejorar mi aprendizaje, reforzar mi conocimiento y establecer una comprensión de los conceptos cubiertos. Si ayudo a alguien compartiendo en el camino, ¡aún mejor!
Repeated String es uno de los desafíos iniciales con dificultad 'EASY'.
Lilah tiene una string, s
, de letras minúsculas en inglés que se repiten infinitamente. Dado un número entero, n
, encuentre y devuelva el número de letras a
en las primeras n
letras de la string infinita de Lilah.
Si la string de Lilah es s = 'abcac'
y n = 10
, la substring que estamos considerando es abcacabcac
, los primeros 10 caracteres de su infinito string. Hay 4 ocurrencias de la letra a
en la substring.
Una función que devuelve un número entero de ocurrencias de la letra a
en el prefijo de longitud n
en la cadena que se repite infinitamente.
aba
10
7
function repeatedString (s , n ) {
let amount = parseInt (n / s .length ),
count = s .split ('' ).filter (c => c === 'a' ).length ,
rest = s .slice (0 , n % s .length ).split ('' ).filter (c => c === 'a' ).length ;
return amount * count + rest;
}
let amount = parseInt (n / s .length ),
count = s .split ('' ).filter (c => c === 'a' ).length ,
rest = s .slice (0 , n % s .length ).split ('' ).filter (c => c === 'a' ).length ;
Toda la lógica está contenida en estas tres variables:
amount
es la cantidad de veces que aparece la string s
basada en n
de la string infinita de Lilah;
count
es la cantidad total de a
contenida en la string s
rest
es la cantidad total de a
contenida en la string que resulta del resto de dividir la longitud dada n
con la string s
Finalmente, finalizo la función devolviendo el conteo final.
Otros idiomas que hablo
def repeatedString (s , n )
amount = n / s .size
count = s .count ('a' )
rest = s .slice (0 , n % s .size ).count ('a' )
amount * count + rest
end
def repeatedString (s , n ):
amount = n // len (s )
count = s .count ('a' )
rest = s .count ('a' , 0 , n % len (s ))
return amount * count + rest
func repeatedString (s string , n int64 ) int64 {
var rest, amount, count int64
rest = n % int64 (len (s ))
amount = n / int64 (len (s ))
count = int64 (strings .Count (s , "a" ))
total := amount * count + int64 (strings .Count (s [0 :rest], "a" ))
return total
}
def repeatedString (s : String , n : Long ): Long = {
val rest = n % s .length
val amount = n / s .length
val count = s .count (_ == 'a' )
val total = amount * count + s .substring (0 , rest.toInt ).count (_ == 'a' )
return total
}
static int repeatedString (String s , long n ) {
long rest = n % s .length ();
long amount = n / s .length ();
long count = s.chars ().filter (c -> c == 'a' ).count ();
long total = amount * count + s .substring (0 , (int ) rest).chars ().filter (c -> c == 'a' ).count ();
return total;
}
function repeatedString ($s , $n ) {
$rest = substr_count (substr ($s , 0 , $n % strlen ($s )), "a" );
$amount = intval ($n / strlen ($s ));
$count = substr_count ($s , "a" );
return $amount * $count + $rest;
}
Pensamiento: Generalmente los que saben poco hablan mucho y los que saben mucho hablan poco.