首页 > 其他 > 详细

【字符串】696. 计数二进制子串

时间:2020-05-03 22:08:12      阅读:66      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

解答:

方法一:

本题的思路和前面的 647. 回文子串的思路相同, 找到每一个满足当前字符和前一个字符组合起来为 ‘01‘ 或者 ‘10‘ 的字符位置, 然后向前后进行扩展. 本题条件中也需要统计重复出现的字符串个数, 即位置不同的也需要统计, 所以跟前面的题目意思相同

 1 class Solution {
 2 public:
 3     int count = 0;
 4 
 5     int countBinarySubstrings(string s) 
 6     {
 7         for (int i = 1; i < s.size(); i++)
 8         {
 9             // 出现‘01‘的情况
10             if (s[i-1] == 0 && s[i] == 1)
11             {
12                 BinarySubstring(s, i-1, i);
13             }
14             // 出现‘10‘的情况
15             if (s[i-1] == 1 && s[i] == 0)
16             {
17                 BinarySubstring(s, i-1, i);
18             }
19         }
20         return count;
21     }
22 
23     void BinarySubstring(string s, int start, int end)
24     {
25         char f = s[start];
26         char e = s[end];
27         while (start >= 0 && end < s.size() && s[start] == f && s[end] == e)
28         {
29             start--;
30             end++;
31             count++;
32         }
33     }
34 };

方法一超时了。

 

方法二:

 1 class Solution {
 2 public:
 3  
 4     int countBinarySubstrings(string s) 
 5     {
 6         int ans=0;
 7 
 8         for(int i=0; i<s.size()-1;i++)
 9         {
10             //从前往后遍历
11             if(s[i]!=s[i+1])
12             {
13                 //发现0,1相邻,开始向两边扩张
14                 int left=i;
15                 int right=i+1;
16                 while(left>0 && right<s.size()-1)
17                 {
18                     //当扩张到下一个0,1相邻和边界时跳出
19                     if((s[left]!=s[left-1]) || (s[right]!=s[right+1]))
20                     {
21                         break;
22                     }
23                     left--;
24                     right++;
25                 }
26                 ans += right-i; //此时符合条件的数量为长度的一半
27                 i = right-1; //直接跳到下一个
28             }
29         }
30         return ans;
31     }
32 };

 

【字符串】696. 计数二进制子串

原文:https://www.cnblogs.com/ocpc/p/12823467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!