830. Positions of Large Groups(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/83184679

题目:

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 singlelarge 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

解释:
其实就是对指针操作的经典题目。
python代码:

class Solution:
    def largeGroupPositions(self, S):
        """
        :type S: str
        :rtype: List[List[int]]
        """
        result=[]
        i=0
        while i<len(S):
            j=i
            letter=S[i]
            while j+1<len(S) and S[j+1]==letter:
                j+=1
            if j-i>=2:
                result.append([i,j])
            i=j+1
        return result

c++代码:

class Solution {
public:
    vector<vector<int>> largeGroupPositions(string S) {
        vector<vector<int>> result;
        int i=0;
        while (i<S.size())
        {
            int j=i;
            char letter=S[i];
            while (j+1<S.size() &&S[j+1]==letter)
                j++;
            if(j-i>=2)
                result.push_back({i,j});
            i=j+1;
        }
        return result;
    }
};

总结:
对指针的经典操作。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/83184679