leetcode 763. Partition Labels
题意:给你一个字符串,将字符串分成最多几段,使得每一段出现的字母都只在该段出现。
思路:保存当前字母最后一次出现的位置,在第一次出现的位置和最后一次出现的位置之间,比较新加入元素和当前最后一位的大小,若新的大,则更新。
代码:
class Solution {
public:
vector<int> partitionLabels(string S) {
vector<int> ans;
vector<int> last(30, 0);
for (int i = 0; i < S.length(); i++)
last[S[i] - 'a'] = i;
int pos = last[S[0]-'a'];
int num = 1;
for (int i = 0; i < S.size(); i++)
{
if (i < pos)
{
num++;
pos = max(pos, last[S[i]-'a']);
}
else if (i == pos)
{
ans.push_back(num);
if (i == S.size()-1)
break;
pos = last[S[i + 1]-'a'];
num = 1;
}
}
return ans;
}
};