划分字母范围字符串S由小写字母组成。我们需要把这个字符串分成尽可能多的片段,同一个字母最多出现在一个片段中。返回表示每个字符串片段长度的列表。示例:输入:S="ababcbacadefegdehijhklij"输出:[9,7,8]解释:除法结果为"ababcbaca","defegde","hijhklij"。每个字母最多出现在一个片段中。像“ababcbacadefegde”、“hijhklij”这样的划分是错误的,因为要划分的片段数量很少。提示:S的长度在[1,500]之间。S仅包含小写字母“a”到“z”。一想到拆分字符串,就会想到回溯,但是这道题不需要回溯来暴力搜索。题目要求同一个字母最多出现在一个segment中,那么如何把同一个字母围在同一个区间内呢?如果你没有接触过这种话题,那是相当困难的。在遍历的过程中,相当于找到了每个字母的边界。如果找到之前遍历过的所有字母中最远的边界,说明这个边界就是切分点。这时,之前所有的字母都出现了,最远的到达了这个边界。可以分为以下两步:统计每个字符的最后位置,从头开始遍历字符,更新字符最远出现位置的下标,若发现字符最远出现位置的下标为等于当前下标,那么分割点已经找到了如图:理解了分割字母区间的原理后,代码就不复杂了,如下:classSolution{public:vector
