划分字母区间

题目

划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 "ababcc" 能够被分为 ["abab", "cc"],但类似 ["aba", "bcc"] 或 ["ab", "ab", "cc"] 的划分是非法的。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。
返回一个表示每个字符串片段的长度的列表。

示例

image

解题思路

1.先找到每个字母出现的最大位置,并将字母记录下来。
2.依次找到当前区间字母出现最大位置,直到最大位置,与尾端重合,表明当前字母出现的区间。

代码

class Solution {
public:
    vector<int> partitionLabels(string s) {
        int pos[27] = {0};
        for(int i = 0; i < s.size(); i++){
            pos[s[i]-'a'] = i;
        }
        vector<int> result;
        int R, L;
        R = pos[s[0]-'a'];
        L = 0;
        for(int i = 0; i < s.size(); i++){
            R = max(R, pos[s[i]-'a']);
            if(i == R) {
                result.push_back(R-L+1);
                L = i + 1;
            }
        }
        return result;
    }
};
posted @ 2026-03-04 22:04  heyuikn  阅读(2)  评论(0)    收藏  举报