Estou postando sobre as minhas respostas aos desafios do HackerRank como forma de melhorar meu aprendizado, reforçar meu conhecimento e estabelecer uma compreensão dos conceitos abordados. Se eu ajudar alguém compartilhando ao longo do caminho, melhor ainda!
Repeated String é um dos desafios iniciais com a dificuldade 'EASY'.
Lilah tem uma string, s
, de letras minúsculas em inglês que são repetidas infinitamente. Dado um número inteiro, n
, encontre e retorne o número de letras a
nas primeiras n
letras da string infinita de Lilah.
Se a string de Lilah é s = 'abcac'
e n = 10
, a substring que consideramos é abcacabcac
, os 10 primeiros caracteres de sua string infinita. Existem 4 ocorrências da letra a
na substring.
Uma função que retorne um número inteiro de ocorrências da letra a
no prefixo de comprimento n
na cadeia infinitamente repetitiva.
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 a lógica está contida nestas três variáveis:
amount
é a quantidade de vezes que a string s
aparece com base em n
da string infinita de Lilah;
count
é a quantidade total de a
contidos na string s
rest
é a quantidade total de a
contidos na string resultante do resto da divisão do comprimento determinado n
com a string s
Por último, finalizo a função retornando a contagem final.
Outras línguas que eu falo
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;
}
Pensamento: Podemos julgar o coração de um homem pela forma como ele trata os animais.