划分字母区间
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
class Solution {
public:
vector<int> partitionLabels(string S) {
//1、采用定长的数组存储每个元素的最大位置
int hash[26] = {0};
for(int i = 0; i < S.size(); i++) {
hash[S[i]-'a'] = i;
}
//2、筛选
int end = 0;
vector<int> vec;
for(int i = 0; i < S.size();) {
int tmp = i;
end = max(hash[S[tmp]-'a'], end);
while(tmp != end) {
end = max(hash[S[tmp]-'a'], end);
tmp++;
}
vec.push_back(end-i + 1);
i = end + 1;
}
return vec;
}
};
贪心思想 + 双指针