题目链接:
力扣https://leetcode-cn.com/problems/count-binary-substrings/
【分析】这道题有一个很重要的条件就是0和1的数量不但要相同,而且相同字符还要连续,所以对于00011来说,只有0011,01符合要求,也就是连续字符中数量较小的值。那么我们只需要把长字符串处理成这种连续字符的个数就行了。
例如? 001100011
处理成 2232,然后对于2和2取最小,2和3取最小,3和2取最小,求和就是答案。
class Solution {
public int countBinarySubstrings(String s) {
char pre = s.charAt(0);
int cnt = 1;
int n = s.length(), i;
List<Integer> list =new ArrayList<>();
for(i = 1; i < n; i++){
if(s.charAt(i) == pre){
cnt++;
}else{
list.add(cnt);
pre = s.charAt(i);
cnt = 1;
}
}
list.add(cnt);
n = list.size();
int ans = 0;
for(i = 1; i < n; i++){
ans += Math.min(list.get(i - 1), list.get(i));
}
return ans;
}
}
|