A wonderful string is a string where at most one letter appears an odd number of times.
- For example,
"ccjjc"
and"abab"
are wonderful, but"ab"
is not.
Given a string word
that consists of the first ten lowercase English letters ('a'
through 'j'
), return the number of wonderful non-empty substrings in word
. If the same substring appears multiple times in word
, then count each occurrence separately.
A substring is a contiguous sequence of characters in a string.
Input: word = "aba" Output: 4 Explanation: The four wonderful substrings are underlined below: - "aba" -> "a" - "aba" -> "b" - "aba" -> "a" - "aba" -> "aba"
Input: word = "aabb" Output: 9 Explanation: The nine wonderful substrings are underlined below: - "aabb" -> "a" - "aabb" -> "aa" - "aabb" -> "aab" - "aabb" -> "aabb" - "aabb" -> "a" - "aabb" -> "abb" - "aabb" -> "b" - "aabb" -> "bb" - "aabb" -> "b"
Input: word = "he" Output: 2 Explanation: The two wonderful substrings are underlined below: - "he" -> "h" - "he" -> "e"
1 <= word.length <= 105
word
consists of lowercase English letters from'a'
to'j'
.
impl Solution {
pub fn wonderful_substrings(word: String) -> i64 {
let word = word.as_bytes();
let mut count = [0; 1024];
let mut mask = 0;
let mut ret = 0;
count[0] = 1;
for i in 0..word.len() {
mask ^= 1 << (word[i] - b'a');
for j in 0..10 {
ret += count[mask ^ (1 << j)];
}
ret += count[mask];
count[mask] += 1;
}
ret
}
}