码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 830. Positions of Large Groups

时间:2018-05-06 13:42:31      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:统计   出现   cal   output   code   like   input   case   不难   

In a string S of lowercase letters, these letters form consecutive groups of the same character.

For example, a string like S = "abbxxxxzyy" has the groups "a""bb""xxxx""z" and "yy".

Call a group large if it has 3 or more characters.  We would like the starting and ending positions of every large group.

The final answer should be in lexicographic order.

 

Example 1:

Input: "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the single large group with starting  3 and ending positions 6.

Example 2:

Input: "abc"
Output: []
Explanation: We have "a","b" and "c" but no large group.

Example 3:

Input: "abcdddeeeeaabbbcd"
Output: [[3,5],[6,9],[12,14]]

 

Note:  1 <= S.length <= 1000

 

这道题本质上是在求字符串中连续重复3次及以上的子串首位位置,看上去不难,其实还是有很多坑在里面。比较直接的思路就是从头到尾遍历,一边遍历一边统计,但是要注意——这个思路最大的坑就是当一个字符串最后的3个字符是重复的时,无法将其返回到答案中。比如测试用例为“bbbaaaaa”,或者“aaaa”最后4个a的统计结果无法被返回,我最开始的解决思路是单独枚举字符串末尾出现重复变量的例子,但是后来我发现情况太多根本没有办法枚举完。于是我在外层for循环上做了点修改,多遍历一次,在内部用个if做判断,问题得到解决

 1 class Solution {
 2 public:
 3     vector<vector<int>> largeGroupPositions(string S) {
 4         vector<vector<int>> res;
 5         if (S.size() < 3)
 6             return res;
 7         /*if (S.size() == 3 && S[0] == S[1] && S[1] == S[2])
 8         {
 9             res.push_back({ 0,2 });
10             return res;
11         }
12         if (S.size() == 4 && S[0] == S[1] && S[1] == S[2] && S[2] == S[3])
13         {
14             res.push_back({ 0,2 });
15             return res;
16         }*/
17         int start = 0;
18         int len = 0;  // the length of group
19         for (int i = 0; i <= S.size(); i++)
20         {
21             //vector<int> temp;
22             if (i != S.size())
23             {
24                 if (S[i] == S[start])
25                 {
26                     len++;
27                     continue;
28                 }
29                 if (len >= 3)
30                 {
31                     res.push_back({ start,start + len - 1 });
32                     len = 1;
33                     start = i;
34                 }
35                 else
36                 {
37                     len = 1;
38                     start = i;
39                 }
40             }
41             else
42             {
43                 if (len >= 3)
44                     res.push_back({ start,start + len - 1 });
45             }
46             
47         }
48         return res;
49     }
50 };

 

LeetCode 830. Positions of Large Groups

标签:统计   出现   cal   output   code   like   input   case   不难   

原文地址:https://www.cnblogs.com/dapeng-bupt/p/8997756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!