每日一题——763. 划分字母区间
题目链接:763. 划分字母区间 - 力扣(LeetCode)
代码:
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;
}
int left = 0;
int right = 0;
vector<int> result;
for(int i = 0; i < s.size();i++)
{
right = max(right,hash[s[i] - 'a']);
if(right == i)
{
result.push_back(right-left+1);
left = i+1;
}
}
return result;
}
};
贪心策略:
找到每个字母的最远出现位置,遍历s,如果i就是这个区间所有位置的最远出现位置,说明这个区间的所有字母都只出现再left到i了,此为一个区间,更新left为i+1,找下一个区间。