class Solution:
def partitionLabels(self, S: str) -> List[int]:
dic = {}
res = []
start,end = 0,0
#用字典记录每个字母最后出现的位置
for i in range(len(S)):
dic[S[i]]=i
for i in range(len(S)):
end = max(end,dic[S[i]])
if i==end:
res.append(end-start+1)
start = i+1
return res
每个字母最多出现在一次划分中,那就意味着这个字母的起始位置和终止位置一定是在一个区间的使用hash表去记录每个字母最后出现的index用end去划分片段,记录每个字母出现的index,比较得出最长的那个区间,然后进行处理当end记录的最大的长度等于index的时候,也就是该字符划分的最大区间位置了此时把记录的长度添加到结果中,然后进行下一次的遍历
总结:解题的关键在于每个字符的最后位置和起始位置一定是在同个区间的,因此只要记录最后出现字符的index,然后不断的去比较,直到end和index相等的时候,这个区间的表示就结束了,然后进行下一段区间的划分。