划分字母区间

题目链接:https://leetcode-cn.com/problems/partition-labels/
题目描述:

题解:
解题思路:划分字母区间
1.统计每一个字符最后出现的位置
2.从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> result;
        if(s.size() < 2)
        {
            result.push_back(s.size());
            return result;
        }
        unordered_map<char, int> map;
        for(int i = 0; i < s.size(); i++)   //字母最后出现的位置
        {
            map[s[i]] = i;
        }
        int right = 0;
        int left = 0;
        for(int i = 0; i < s.size(); i++)   //遍历字符串,更新边界
        {
            right = max(right, map[s[i]]);      //最大边界
            if(right == i)
            {
                result.push_back(right - left + 1);
                left = right + 1;
            }
                
        }
        return result;

    }
};
posted @ 2021-06-30 11:02  张宵  阅读(47)  评论(0编辑  收藏  举报