力扣 763. 划分字母区间

62 阅读1分钟

🔗 leetcode.cn/problems/pa…

题目

  • s 字符串划分为尽可能多的片段,同一字母最多出现在一个片段
  • 将所有划分结果按顺序连接,得到的字符串仍然是 s
  • 返回每个片段的字符串的长度列表

思路

  • 记录每个字符出现的最大 index
  • 若当前的 index 是前序字符串的最大 index,则记录前序字符串的长度,并重置计数

代码

class Solution {
public:
    vector<int> partitionLabels(string s) {
        map<int, int> mp;
        for (int i = 0; i < s.size(); i++) {
            mp[s[i]] = i;
        }
        int curr_max = mp[s[0]];
        vector<int> ans;
        int count = 0;
        for (int i = 0; i < s.size(); i++) {
            //printf("%d %c curr_max %d mp %d count %d \n", i, s[i], curr_max, mp[s[i]], count);
            curr_max = max(curr_max, mp[s[i]]);
            count++;
            if (i == curr_max) {
                ans.push_back(count);
                count = 0;
            }
        }
        return ans;
        
    }
};