首先遍历字符串,记录并更新每一个字符最后出现的位置;
再次遍历字符串,记录当前遍历过程中字符的出现最晚位置Max_pos;若Max_pos与当前下标相同,则得到一个分割阈
class Solution {
public:
vector<int> partitionLabels(string S) {
unordered_map<char,int> table;
vector<int> ans;
for(int i=0;i<S.size();i++)
{
table[S[i]]=i;
} //建立hash表,记录每个字母在S中最后一次出现的位置
int flag=INT_MIN;
int last = 0;
for(int i=0;i<S.size();i++)
{
flag=max(flag,table[S[i]]);
if(flag==i)
{
ans.push_back(i+1-last);
last = i+1;
}
}
return ans;
}
};
本文介绍了一种高效的字符串分割算法,通过两次遍历实现对字符串的有效分区。首次遍历记录每个字符最后一次出现的位置,第二次遍历则根据这些信息确定分割点。
1145

被折叠的 条评论
为什么被折叠?



