马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 糖逗 于 2020-5-16 22:08 编辑
题目描述:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例 1:
输入: S = "ababcbacadefegdehijhklij"
输出: [9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
注意:
S的长度在[1, 500]之间。
S只包含小写字母'a'到'z'。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-labels
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
vector<int> partitionLabels(string S) {
map<char, int> store;
vector<int> res;
for(int i = 0; i < S.size(); i++){
if(store.count(S[i]) == 0){
int right = S.size()-1;
while(S[right] != S[i]){
right--;
}
store[S[i]] = right;
}
}
int left = 0, sum = 1, temp = 0;
while(left < S.size()){
temp = max(store[S[left]], temp);
if(left == temp){
res.push_back(sum);
sum = 0;
}
left++;
sum++;
}
return res;
}
};
注意事项:
1.思路,先建立一个store存储S中每个不重复字符串的向右取得的相同字符的最大坐标数。然后,遍历S中每个字符保证划分的字符串内所有字符的最大向右延伸坐标都小于等于这段字符串最右端的字符下标。 |