1、题目描述
2、解题思路
1、以不同字符为边界,找出所有单一字符的子串。比如:"aabbaccc"的不同字符为边界的字串为:“aa”、“bb”、“a”、“ccc”;
2、统计字串的组合数。例如:"aaa"的组合有:“a”、“aa”、“aaa”。总共3个,可以发现规律是,组合数为长度n从 1 加到 n,即:n(n+1)/2
3、累加所有字串的组合数即是最终答案。
3、解题代码
class Solution {
public int countLetters(String S) {
int sum = 0;
int subStrLength = 0;
int start = 0;
int end = 0;
char c = S.charAt(start);
ArrayList<String> list = new ArrayList<>();
while (true) {
if (c == S.charAt(end)) {
end++;
} else {
list.add(S.substring(start, end)); // 包含头不包含尾
start = end;
c = S.charAt(start);
}
if (end == S.length()) {
list.add(S.substring(start, end));
break;
}
}
for (String s : list) {
if (s.length() == 1) {
sum++;
} else {
subStrLength = s.length();
sum += subStrLength * (subStrLength + 1) / 2;
}
}
return sum;
}
}