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) }; ```