Вот проблема:

Существует строка 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));
}