763. 划分字母区间
//逻辑思维能力真的很重要,让我们一步一步分析
//贪心思想,关键字:尽可能多的片段,要想尽可能多该划分时候就要及时划分
//根据限制条件,同一个字母最多出现在一个片段中,比如包含a字母的片段它的终止位置一定不能小于a字母最后出现的位置
#include<unordered_map>
class Solution {
public:
vector<int> partitionLabels(string S) {
//创建返回结果数组
vector<int> res;
//创建列表,用来存储每个字母最后出现的位置
int tabel[26];
for(int i = 0; i < S.length(); i++)
{
tabel[S[i]-'a'] = i;
}
//创建维护最小区间的变量
int start = 0;
int end = 0;
for(int j = 0; j < S.length(); j++)
{
end = max(tabel[S[j]-'a'],end);
if(j == end)
{
res.push_back(end - start + 1);
start = j + 1;
}
}
return res;
}
};