力扣696、计数二进制子串

1、单vector存储(20ms,75%;14MB,24%)

 1   int countBinarySubstrings(string s) {
 2         vector<int>arr;
 3         int len=s.size();
 4         int i=0;
 5 
 6         //计算每一段0或1的长度,相邻必不同
 7         while(i<len){
 8             int sum=0;
 9             char ch=s[i];
10             while(i<len&&s[i]==ch){
11                 sum++;
12                 i++;
13             }
14             arr.push_back(sum);
15         }
16 
17         int ins=0;
18         //连续两个长度中小的即为目标数
19         for(int i=0;i+1<arr.size();i++)
20         ins+=min(arr[i],arr[i+1]);
21 
22         return ins;
23     }

 

2、last存储(20ms,75%;11.5MB,30%)

 1   int countBinarySubstrings(string s) {
 2         int ans = 0;
 3         char last = ' ';
 4         //pre保存0或1的长度,cur记录0或1暂时长度
 5         int pre = 0;
 6         int cur = 0;
 7 
 8         /* “-”的作用在于帮助完成最后一轮循环,
 9          * 因为该题的答案计算有一轮延迟
10          */
11         s+="-";
12         for (char c : s) {
13             if (last != c) {
14                 last = c;
15                 ans += min(pre, cur);
16                 pre = cur;
17                 cur = 0;
18             }
19             cur++;
20         }
21         return ans;
22     }

 

 

 

3、变量last存储(20ms,75%;10MB,80%)

 1 int countBinarySubstrings(string s) {
 2         int len=s.size();
 3         int ins=0;
 4         int last=0;
 5         int i=0;
 6 
 7         //计算每一段0或1的长度,相邻必不同
 8         while(i<len){
 9             int sum=0;
10             char ch=s[i];
11             while(i<len&&s[i]==ch){
12                 sum++;
13                 i++;
14             }
15             
16             //连续两个长度中小的即为目标数
17              ins+=min(sum,last);
18              last=sum;
19         }
20          return ins;
21     }

 

上一篇:springboot集成sa-token框架实现用户认证功能(使用注解形式,代码量极少)


下一篇:.运行npm install 时,卡在sill idealTree buildDeps没有反应