ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Give a string`s`, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and all the 0's and all the 1's in these substrings are grouped consecutively. Substrings that occur multiple times are counted the number of times they occur. **Example 1:** ~~~ 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:** ~~~ Input: "10101" Output: 4 Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's. ~~~ **Note:** * `s.length`will be between 1 and 50,000. * `s`will only consist of "0" or "1" characters. ![](https://img.kancloud.cn/46/72/4672a176684f6010b55bd48dce653410_1186x508.png) ``` var countBinarySubstrings = function(s) { let n = 0, arr = s.match(/([1]+)|([0]+)/g) for (let i = 0; i < arr.length - 1; i++) {         n += Math.min(arr[i].length, arr[i + 1].length)     } return n }; ``` ``` // 统计前一种数连续的个数,和当前数连续的个数, // 每次数字变了结果加上这两个里小的一个, // 同时前一个数的个数等于当前数的个数,当前数的个数重置为1。 var countBinarySubstrings = function (s) { let ans = 0; let prev = 0; let cur = 1 for (let i = 1; i < s.length; i++) { if (s[i] !== s[i - 1]) { ans += Math.min(prev, cur) prev = cur cur = 1 } else { cur++ } } return ans + Math.min(prev, cur) }; ```