763. 划分字母区间
https://leetcode-cn.com/problems/partition-labels/
解法一:贪心
先一次遍历S串,建立每个字符最后出现位置的hash。
然后再遍历一次S串,用[start : last]
记录一个片段,start初始为0,last为S[0]最后出现的位置。i从start遍历到last,每次查hash,若出现比last还靠后的,更新last。遍历一轮后得到一个[start : last]
片段,计入res。
class Solution:
def partitionLabels(self, S: str) -> List[int]:
res = []
last_map = {}
for i in range(len(S)):
last_map[S[i]] = i
start = 0
while start < len(S):
last = last_map[S[start]]
i = start
while i < last:
if last_map[S[i]] > last:
last = last_map[S[i]] #更新
i += 1
res.append(last-start+1)
start = last+1
return res
最后更新于