Input: s ="aaaba"Output: 8Explanation: The substrings with one distinct letter are "aaa","aa","a","b"."aaa" occurs 1 time."aa" occurs 2 times."a" occurs 4 times."b" occurs 1 time.So the answer is1+2+4+1=8.
Every substring with only one distinct letter is a substring of a run of consecutive identical characters. For a run of length n, the number of such substrings is n * (n + 1) / 2 (all possible substrings within the run).
classSolution {
publicintcountLetters(String s) {
int ans = 0, cnt = 1, n = s.length();
for (int i = 1; i < n; ++i) {
if (s.charAt(i) == s.charAt(i-1)) cnt++;
else {
ans += cnt * (cnt + 1) / 2;
cnt = 1;
}
}
ans += cnt * (cnt + 1) / 2;
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classSolution {
funcountLetters(s: String): Int {
var ans = 0var cnt = 1val n = s.length
for (i in1 until n) {
if (s[i] == s[i-1]) cnt++else {
ans += cnt * (cnt + 1) / 2 cnt = 1 }
}
ans += cnt * (cnt + 1) / 2return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution:
defcountLetters(self, s: str) -> int:
ans = cnt =1 n = len(s)
for i in range(1, n):
if s[i] == s[i-1]:
cnt +=1else:
ans += cnt * (cnt -1) //2 cnt =1 ans += cnt * (cnt -1) //2return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
impl Solution {
pubfncount_letters(s: String) -> i32 {
let s = s.as_bytes();
letmut ans =0;
letmut cnt =1;
let n = s.len();
for i in1..n {
if s[i] == s[i-1] {
cnt +=1;
} else {
ans += cnt * (cnt +1) /2;
cnt =1;
}
}
ans += cnt * (cnt +1) /2;
ans
}
}