Leetcode763
1.问题描述
2.解决方案
这道题虽然说放在贪心专题里面的,但是并没有很明显的贪心的痕迹在里面,思路可以说很难了
1.如果这个区间里出现的所有字母中的出现最远边界等于目前遍历到的index,那就说明找到了目前遍历到的字母的全部集合,后面不会出现这个区间里的字母了
2.代码的实现也值得借鉴,在求一个区间每个元素的某个特性的最值,可以在for的开始求一个最大
for(int i=0;i<s.size();i++){
end=max(end,hash[s[i]-'a']);
3.包括这个哈希求最远边界也值得借鉴
vector<int> hash(27,-1);
for(int i=0;i<s.size();i++){
hash[s[i]-'a']=i;
}
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> hash(27,-1);
for(int i=0;i<s.size();i++){
hash[s[i]-'a']=i;
}
vector<int> result;
int start=0;
int end=0;
for(int i=0;i<s.size();i++){
end=max(end,hash[s[i]-'a']);
if(end==i){
result.push_back(end-start+1);
start=i+1;
}
}
return result;
}
};