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;}
};