2023.8.3
本题的关键是要确保同一字母需要在同一片段中,而这就需要关注到每个字母最后一次出现的位置。
思路:用一个哈希表保存每个字母(26个)最后一次出现的位置。然后从头遍历,不断更新最右边界,直到当前位置等于最右边界的位置。
代码如下:
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> ans;
int hash[26] = {0};
//统计每个字母最后一次出现的位置
for(int i=0; i<s.size(); i++)
{
hash[s[i]-'a'] = i;
}
int left = 0;
int right = 0;
for(int i=0; i<s.size(); i++)
{
right = max(hash[s[i]-'a'],right);
if(right == i)
{
ans.push_back(right-left+1);
left = right + 1;
}
}
return ans;
}
};