题目链接:https://leetcode-cn.com/problems/partition-labels/
题目描述:
题解:
解题思路:划分字母区间
1.统计每一个字符最后出现的位置
2.从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> result;
if(s.size() < 2)
{
result.push_back(s.size());
return result;
}
unordered_map<char, int> map;
for(int i = 0; i < s.size(); i++) //字母最后出现的位置
{
map[s[i]] = i;
}
int right = 0;
int left = 0;
for(int i = 0; i < s.size(); i++) //遍历字符串,更新边界
{
right = max(right, map[s[i]]); //最大边界
if(right == i)
{
result.push_back(right - left + 1);
left = right + 1;
}
}
return result;
}
};