A subsequence of a string is good if it is not empty and the frequency of each one of its characters is the same.
Given a string s, return the number of good subsequences ofs. Since the answer may be too large, return it modulo 109 + 7.
A subsequence is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters.
Example 1:
Input: s = "aabb"
Output: 11
Explanation: The total number of subsequences is 24. There are five subsequences which are not good: "aabb", "aabb", "aabb", "aabb", and the empty subsequence. Hence, the number of good subsequences is 24-5 = 11.
Example 2:
Input: s = "leet"
Output: 12
Explanation: There are four subsequences which are not good: "leet", "leet", "leet", and the empty subsequence. Hence, the number of good subsequences is 24-4 = 12.
Example 3:
Input: s = "abcd"
Output: 15
Explanation: All of the non-empty subsequences are good subsequences. Hence, the number of good subsequences is 24-1 = 15.
Constraints:
1 <= s.length <= 104
s consists of only lowercase English letters.
Solutions
Solution 1
Thinking
A good subsequence is nonempty and every letter that appears does so equally often. There are \(2^n\) subsequences, but only \(26\) letters, so frequencies decide everything.
Enumerate the common frequency \(i=1,\ldots,mx\). A letter with count \(v\ge i\) may contribute \(\binom{v}{i}\) choices or be omitted, i.e. \(\binom{v}{i}+1\) options; letters with \(v<i\) must stay out. Multiply over letters, subtract the empty choice, and sum over \(i\). Factorials and inverses precompute the binomials.