Easy
You are given a string s consisting only of lowercase English letters.
A prefix of s is called a residue if the number of distinct characters in the prefix is equal to len(prefix) % 3.
Return the count of residue prefixes in s.
A prefix of a string is a non-empty substring that starts from the beginning of the string and extends to any point within it.
Example 1:
Input: s = “abc”
Output: 2
Explanation:
"a" has 1 distinct character and length modulo 3 is 1, so it is a residue."ab" has 2 distinct characters and length modulo 3 is 2, so it is a residue."abc" does not satisfy the condition. Thus, the answer is 2.Example 2:
Input: s = “dd”
Output: 1
Explanation:
"d" has 1 distinct character and length modulo 3 is 1, so it is a residue."dd" has 1 distinct character but length modulo 3 is 2, so it is not a residue. Thus, the answer is 1.Example 3:
Input: s = “bob”
Output: 2
Explanation:
"b" has 1 distinct character and length modulo 3 is 1, so it is a residue."bo" has 2 distinct characters and length mod 3 is 2, so it is a residue. Thus, the answer is 2.Constraints:
1 <= s.length <= 100s contains only lowercase English letters.class Solution {
fun residuePrefixes(s: String): Int {
val n = s.length
var count = 0
var p = 0
val c1 = s[p]
while (p < n && c1 == s[p]) {
if (++p % 3 == 1) {
count++
}
}
if (p >= n) {
return count
}
val c2 = s[p]
while (p < n && (c1 == s[p] || c2 == s[p])) {
if (++p % 3 == 2) {
count++
}
}
return count
}
}