Вот проблема:
Существует строка S из строчных букв латинского алфавита, которая повторяется бесконечное количество раз. По заданному целому числу n найдите и выведите количество букв a в первых n буквах бесконечной строки.
https://www.hackerrank.com/challenges/repeated-string/
Мы рассматриваем подстроку abcacabcac, первые 10 символов бесконечной строки. В подстроке есть вхождения a. Например, s=’abcac’, n=10
Мое решение:
Его можно свести к следующим формулам:
numberOfRepetOfSInN = n / размер(ы)
partOfIncompleteSInN = n % размера
totalA = numberOfRepetOfSInN * количествоA(s) + количествоA(s, partOfIncompleteSInN)
И тогда нам нужно только определить функцию amountOfA (string, int), которая найдет, сколько «a» есть до позиции int.
private static int amountOfA(String totalString, char charToCount, int to) { int total = 0; for(int i = 0; i < to; i++) { if(totalString.charAt(i) == charToCount) { total++; } } return total; } public static long repeatedString(String s, long n) { int sLenght = s.length(); return (n / sLenght) * howMany(s, 'a', sLenght) + howMany(s, 'a', (int)(n % sLenght)); }