题目要求不含重复字母的划分为最多段,所以采用贪心的思想
就是从头开始先找到第一个字母的最后位置,并且更新段的最后位置
更新规则:1. 具体来说就是到达第一个字母的最后位置之前,如果这之间有新的字母的最后位置更靠后
2. 那么就需要把段的最后位置更新成这个靠后的
3. 以此类推,一直到更新不了最后位置了也就是循环走到了段的最后位置时
4. 这时说明完成了所有更新,到达了分割点
5. 循环进行下一轮的分割
def partitionLabels(self, s):
"""
:type s: str
:rtype: List[int]
"""
res = []
last = [0]*26
for i,ch in enumerate(s):
last[ord(ch)-ord("a")] = i
l,r = 0,0
for i,ch in enumerate(s):
r = max(last[ord(ch)-ord("a")],r)
if i == r:
res.append(r-l+1)
l = r + 1
return res