1180. 统计只含单一字母的子串

题目

给你一个字符串 S,返回只含 单一字母 的子串个数。

示例1:

1
2
3
4
5
6
7
8
9
输入: "aaaba"
输出: 8
解释:
只含单一字母的子串分别是 "aaa", "aa", "a", "b"。
"aaa" 出现 1 次。
"aa" 出现 2 次。
"a" 出现 4 次。
"b" 出现 1 次。
所以答案是 1 + 2 + 4 + 1 = 8。

示例2:

1
2
输入: "aaaaaaaaaa"
输出: 55

提示:

  1. 1 <= S.length <= 1000
  2. S[i] 仅由小写英文字母组成。

解法

解法一:

找到单一的字符串组,计算每个组的和相加即可。每个组的和就等于1加到该组字符长度。如果一个组字符串长度为10,那么它的单一子串数就是1+2+3+…+10=55

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int countLetters(String S) {
int count = 1;
int sum = 0;
for (int i = 1;i < S.length();i++) {
if (S.charAt(i) != S.charAt(i - 1)) {
sum += (1 + count) * count / 2;
count = 1;
} else {
count++;
}
}
sum += (1 + count) * count / 2;
return sum;
}
0%