Back to all solutions

#2947 - Count Beautiful Substrings I

Problem Description

You are given a string s and a positive integer k.

Let vowels and consonants be the number of vowels and consonants in a string.

A string is beautiful if:

  • vowels == consonants.
  • (vowels * consonants) % k == 0, in other terms the multiplication of vowels and consonants is divisible by k.

Return the number of non-empty beautiful substrings in the given string s.

A substring is a contiguous sequence of characters in a string.

Vowel letters in English are 'a', 'e', 'i', 'o', and 'u'.

Consonant letters in English are every letter except vowels.

Solution

/**
 * @param {string} s
 * @param {number} k
 * @return {number}
 */
var beautifulSubstrings = function(s, k) {
  const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
  let result = 0;

  for (let start = 0; start < s.length; start++) {
    let vowelCount = 0;
    let consonantCount = 0;

    for (let end = start; end < s.length; end++) {
      if (vowels.has(s[end])) {
        vowelCount++;
      } else {
        consonantCount++;
      }

      if (vowelCount === consonantCount && (vowelCount * consonantCount) % k === 0) {
        result++;
      }
    }
  }

  return result;
};