[leetcode]Partition Labels
链接:https://leetcode.com/problems/partition-labels/description/
Question
A string S
of lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.
Example 1
Input: S = "ababcbacadefegdehijhklij"
Output: [9,7,8]
Explanation:
The partition is "ababcbaca", "defegde", "hijhklij".
This is a partition so that each letter appears in at most one part.
A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits S into less parts.
Note:
S will have length in range [1, 500].
S will consist of lowercase letters ('a' to 'z') only.
Solution
// 思路:从头开始找字符的最后位置,比如ababcbacadefegdehijhklij中a的最后位置end_i,然后找开始a到最后a中的所有字符的最后位置end_i2
// 如果end_i2 > end_i则更新end_i
class Solution {
public:
vector<int> partitionLabels(string S) {
char c = S[0];
int start_i = 0;
int end_i = S.find_last_of(c);
vector<int> count;
while (end_i <= S.size()-1) {
int cnt = 0;
for (int i = start_i; i <= end_i; i++) {
cnt++;
char c = S[i];
int index = S.find_last_of(c);
if (index > end_i) end_i = index;
}
start_i = end_i+1;
end_i = S.find_last_of(S[start_i]);
count.push_back(cnt);
}
return count;
}
};
思路:看代码注释~