763. 划分字母区间

image.png

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
    1. class Solution {
    2. public:
    3. vector<int> partitionLabels(string s) {
    4. int hash[27] = {0};
    5. for(int i=0;i<s.size();i++)
    6. {
    7. hash[s[i]-'a']=i;
    8. }
    9. int left = 0;
    10. int right = 0;
    11. vector<int> result;
    12. for(int i =0;i<s.size();i++)
    13. {
    14. right = max(hash[s[i]-'a'],right);
    15. if(right == i)
    16. {
    17. result.push_back(right-left+1);
    18. left = i+1;
    19. }
    20. }
    21. return result;
    22. }
    23. };