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


浙公网安备 33010602011771号