leetcode 763解题报告

题目:
A string S of lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.

Example 1:
Input: S = “ababcbacadefegdehijhklij”
Output: [9,7,8]

其实和leetcode#56是异曲同工的:
Given a collection of intervals, merge all overlapping intervals.
leetcode56

对于本道题,每个字母都有一个出现范围区间,把重叠的区间合并就好。

贴出代码:

    bool cmp(pair<int,int> a,pair<int,int> b)
    {
        return a.first<b.first;
    }
    vector<int> partitionLabels(string S)
	{
		vector<int> res;
		vector<pair<int, int> > qj;
		for (int i = 0; i < 26; i++)
		{
			int begin = -1, end = -1;
			for (int j = 0; j < S.size(); j++)
			{
				if (S[j] == 'a' + i)
				{
					if (begin == -1)
						begin = end = j;
					else
						end = j;
				}
			}
			if (begin != -1)
			{
				qj.push_back(make_pair(begin, end));
			}
		}
		sort(qj.begin(), qj.end(), cmp);
		int begin = qj[0].first, end = qj[0].second, i = 1;
		while (i < qj.size())
		{
			if (end >= qj[i].first)
				end = max(end, qj[i].second);
			else
			{
				res.push_back(end - begin + 1);
				begin = qj[i].first;
				end = qj[i].second;
			}
			i++;
		}
		res.push_back(end - begin + 1);
		return res;
	}

猜你喜欢

转载自blog.csdn.net/weixin_41761478/article/details/83756218
今日推荐