思路:贪心+双指针
重要性质:当片段包含某个字符x 时,需要至少包含到x在字符串中最后出现的位置
考虑从左往右计算第一个片段,right来表示这个片段至少要到达的位置。类似跳跃游戏Ⅱ的,根据每个遍历到的字符的最后一个位置来更新right,直到i==right 的时候,一个新的片段才能结束。
我们通过一段动画来进一步理解这个思想👇
P4088.划分字母区间
Leetcode 763.划分字母区间-原题链接
题目内容
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 "ababcc" 能够被分为 ["abab","cc"],但类似 ["aba","bcc"] 或 ["ab","ab","cc"] 的划分是非法的。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。
返回一个表示每个字符串片段的长度的列表。
输入描述
一个字符串 s
输出描述
一个表示每个字符串片段的长度的列表
样例1
输入
ababcbacadefegdehijhklij
输出
9 7 8
说明
划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
样例2
输入
eccbbbbdec
输出
10
提示:
- 1<=s.length<=500
- s仅由小写英文字母组成