1 minute read

A string is good if there are no repeated characters.

Given a string s​​​​​, return the number of good substrings of length three in s​​​​​​.

Note that if there are multiple occurrences of the same substring, every occurrence should be counted.

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

Example 1:

Input: s = “xyzzaz” Output: 1 Explanation: There are 4 substrings of size 3: “xyz”, “yzz”, “zza”, and “zaz”. The only good substring of length 3 is “xyz”. Example 2:

Input: s = “aababcabc” Output: 4 Explanation: There are 7 substrings of size 3: “aab”, “aba”, “bab”, “abc”, “bca”, “cab”, and “abc”. The good substrings are “abc”, “bca”, “cab”, and “abc”.

Constraints:

1 <= s.length <= 100 s​​​​​​ consists of lowercase English letters.

/**
 * @param {string} s
 * @return {number}
 */
var countGoodSubstrings = function (s) {
  // Initialize a variable 'count' to keep track of the count of substrings with distinct characters
  let count = 0;

  // Iterate through the string 's' up to the third-to-last character
  for (let i = 0; i <= s.length - 3; i++) {
    // Extract a substring of length 3 starting from the current index 'i'
    let word = s.substring(i, i + 3);

    // Create a Set from the characters of the substring 'word'
    let wordSet = new Set(word);

    // Check if the Set has 3 unique characters (distinct characters)
    if (wordSet.size === 3) {
      // If the substring has 3 distinct characters, increment the 'count'
      count++;
    }
  }

  // Return the final count of substrings with distinct characters
  return count;
};

The time complexity is O(n) where n is the length of the string. The space complexity is O(1) since the size of the set is constant.

Leave a comment