龙空技术网

算法:计数二进制子串

小猿陪学 45

前言:

现在朋友们对“字符串子串个数计算”大概比较重视,我们都需要知道一些“字符串子串个数计算”的相关资讯。那么小编在网上收集了一些对于“字符串子串个数计算””的相关资讯,希望兄弟们能喜欢,大家一起来学习一下吧!

题目:

给定一个字符串 s,计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是连续的。

重复出现的子串要计算它们出现的次数。

示例:

输入: "00110011"

输出: 6

解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。

请注意,一些重复出现的子串要计算它们出现的次数。

另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。

思路:

统计连续段的长度,比如两个连续段A和B,这两段中满足条件的子串个数是min(A,B)。

代码:

class Solution {public:    int countBinarySubstrings(string s) {        int n = s.size();                //统计连续段        vector<int> v;        for(int i=0; i<n;)        {            int j=i+1;            for(;j<n;j++)            {                if(s[j]!=s[i])                    break;            }            v.push_back(j-i);            i=j;        }        //根据连续段相邻元素的关系,计算结果        int result = 0;        for(int i=1; i<v.size(); i++)        {            result += min(v[i], v[i-1]);        }        return result;            }};

标签: #字符串子串个数计算