763.划分字母区间
本题对字符串划分区间,同一个字母只能出现在一个区间内。
步骤:
1.首先统计每个字母出现的最远位置
2.left和right统计左右边界的位置
3.遍历更新right为right和当前字母的最大位置
4.区间分割点为i == right
class Solution {
public:
vector<int> partitionLabels(string s) {
int hash[27] = {0}; //记录每个元素最远出现位置
for(int i = 0;i<s.size();i++){
hash[s[i] - 'a'] = i;
}
vector<int> res;
int left = 0,right = 0;
for(int i = 0;i<s.size();i++){
right = max(right,hash[s[i] - 'a']);
if(i == right){
res.push_back(right-left+1);
left = i+1;
}
}
return res;
}
};