已解答
中等
相关标签
相关企业
提示
给你一个字符串 s
。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s
。
返回一个表示每个字符串片段的长度的列表。
class Solution(object):
def partitionLabels(self, s):
"""
:type s: str
:rtype: List[int]
"""
hashmap = {}
for index , i in enumerate(s):
if hashmap.get(i)==None:
hashmap[i]=[index,index]
else:
hashmap[i][1] = index
# 左臂右弼的()
start = hashmap[s[0]][0]
end = hashmap[s[0]][1]
ans = []
for i in range(len(s)):
if i>end:
ans.append(end - start+1)
start = i
end = hashmap[s[i]][1]
if hashmap[s[i]][1] > end:
end = hashmap[s[i]][1]
ans.append(end-start+1)
return ans
这个很简单的贪心算法,也就是遍历一遍,然后看看遍历内的东西最远额能到哪里,如果遍历到达了之前的元素到达的最远,那就是一个划分