696. 计数二进制子串

696. 计数二进制子串

难度:简单
题目描述
696. 计数二进制子串_第1张图片

解题思路
今天的简单题但是感觉思路有点不好想诶
重点在于连续出现相同的字符,大概是滑动窗口的思想?用两个变量来计数,pre记录上一个连续出现的字符长度,cur记录当前字符出现的次数。例如00110,那到0011的时候,pre = 2,cur=2
只要cur <= pre,就一定能组成符合要求的字串。
用last来保存上次连续出现的字符(也可以不用),如果这个跟上一个相同,就cur++
当遇到不同的情况时,让pre = cur,当前的cur = 1

/*
		     * 696. 计数二进制子串
		     * 2020/8/10
		     *  简单   "00110011"
		     */
		    public int countBinarySubstrings(String s) {
		    	
		    	if(s.length() == 0)
		    		return 0;
		    	char[] str = s.toCharArray();
		    	int pre = 0,cur = 0,res = 0;
		    	char last = str[0];
		    	for (int i = 1; i < str.length; i++) {
					if(str[i] == last ) { //如果跟上一个结果相等,记录成连续出现的次数
						cur++;
					}else {  //如果不一样的话就把连续出现次数变成1
						last = str[i];
						pre = cur;
						cur = 1;
					}
					if(pre >= cur) { //如果前一个出现的次数大于当前,肯定能组成满足要求的
						res ++;
					}
					
				}
		    	return res;
		    }		    

696. 计数二进制子串_第2张图片

你可能感兴趣的:(力扣刷题笔记)