HackerRank Repeated String | JS Solution

Problem

HackerRank detailed problem description can be found here.

Inputs & Outputs

/*
param {string} s
param {number} n

returns {number} Number of `a` occurances
*/

Test Cases

repeatedString('aba', 10);
repeatedString('a', 1000000);

Pseudo Code

  1. Let's figure out how many times the string s will be repeated in our algorithm without remainder and record the number in fullRepeats variable. This allows us to skip through inefficient looping over the same string s.
    For example, if we start with the following inputs s = 'aba', n = 10, we can see that 'aba' string will be repeated 3 times in full in our function ('aba-aba-aba-a') and therefore we can only count 'a's in 'aba' once and then multiply the result by the number of full string repeats countA = countA * fullRepeats or 2 * 3 = 6
  2. Now, if there was a remainder, we can loop over our sting s one more time up to that remainder
  3. Lastly, let's return the countA

JavaScript Solution

function repeatedString(s, n) {
  let fullRepeats = Math.trunc(n / s.length);
  let remainder = n % s.length;
  let countA = 0;

  for (let i = 0; i < s.length; i++) {
    if (s.charAt(i) === 'a') {
      countA++;
    }
  }

  countA = countA * fullRepeats;

  if (remainder) {
    for (let i = 0; i < remainder; i++) {
      if (s.charAt(i) === 'a') {
        countA++;
      }
    }
  }

  return countA;
}

Resources

  1. Repeated String algorithm by HackerRank
  2. Math.trunc() and charAt() by MDN Web Docs