696. Count Binary Substrings java
Example 1:shell
Input: "00110011" Output: 6 Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10", "0011", and "01". Notice that some of these substrings repeat and are counted the number of times they occur. Also, "00110011" is not a valid substring because all the 0's (and 1's) are not grouped together.
Example 2:code
Input: "10101" Output: 4 Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.
思路:題目大意是,給一個二進制的字符串,問有多少子串的0個數量等於1的數量且子串中0和1不能交替出現。ip
00110011 zeroCount oneCount last 0 1 0 -1->0 0 2 0 0 1 2 1 0->1 有一個符合要求的子串01 1 2 2 1 有一個符合要求的子串0011 0 1 2 1->0 有一個符合要求的子串10 0 2 2 0 有一個符合要求的子串1100 1 2 1 0->1 有一個符合要求的子串01 1 2 2 1 有一個符合要求的子串0011
Java實現:leetcode
public int countBinarySubstrings(String s) { // 子串知足 // 1)0和1個數相等 // 2)0與1不能交替出現 int ans = 0; int zeroCount = 0; int oneCount = 0; int last = -1; for (int i=0; i<s.length(); i++) { char c = s.charAt(i); if (c == '0') { if (last == -1 || last == 1) { zeroCount = 0; last = 0; } zeroCount++; } else { if (last == -1 || last == 0) { oneCount = 0; last = 1; } oneCount++; } if (last == 0) ans += zeroCount<=oneCount?1:0; else ans += oneCount<=zeroCount?1:0; } return ans; }