[Leetcode]763. 划分字母区间

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

思路

先记录每一个字母最后出现的位置,从前向后扫记录目前所扫到的所有字母出现的最后位置,与当前下标比较,如果当前下标比之前所出现的字母的最后位置相等,说明该段满足题意可以划分。

Solution

Code

class Solution
{
  public:
    int pos[26];
    vector<int> partitionLabels(string str)
    {
        vector<int> ans;
        while (!ans.empty())
            ans.pop_back();
        for (int i = 0, len = str.length(); i < len; ++i)
            pos[str[i] - 'a'] = i;
        int l = 0, r = 0;
        for (int i = 0, len = str.length(); i < len; ++i)
        {
            r = max(r, pos[str[i] - 'a']);
            if (i == r)
            {
                ans.push_back(r - l + 1);
                l = r + 1;
            }
        }
        return ans;
    }
};
评论区

Gitalking ...

Markdown is supported

Be the first guy leaving a comment!