classSolution{public:
vector<int>partitionLabels(string S){int hash[27]={0};// i为字符,hash[i]为字符出现的最后位置for(int i =0; i < S.size(); i++){// 统计每一个字符最后出现的位置
hash[S[i]-'a']= i;}
vector<int> result;int left =0;int right =0;for(int i =0; i < S.size(); i++){
right =max(right, hash[S[i]-'a']);// 找到字符出现的最远边界if(i == right){
result.push_back(right - left +1);
left = i +1;}}return result;}};
56. 合并区间
classSolution{public:
vector<vector<int>>merge(vector<vector<int>>& intervals){sort(intervals.begin(), intervals.end(),[](vector<int>& x, vector<int>& y){return x[0]<y[0];});
vector<vector<int>> res;int left = intervals[0][0];int right = intervals[0][1];for(int i=1; i<intervals.size(); i++){if(right >= intervals[i][0]){
right =max(right, intervals[i][1]);}else{
res.push_back(vector<int>{left, right});
left = intervals[i][0];
right = intervals[i][1];}}
res.push_back(vector<int>{left, right});return res;}};