Skip to content

Latest commit

 

History

History
39 lines (33 loc) · 1.38 KB

763. 划分字母区间-Medium.md

File metadata and controls

39 lines (33 loc) · 1.38 KB

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

 示例 1:

输入S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释划分结果为 "ababcbaca", "defegde", "hijhklij"每个字母最多出现在一个片段中 "ababcbacadefegde", "hijhklij" 的划分是错误的因为划分的片段数较少。 

提示:

  • S的长度在[1, 500]之间。
  • S只包含小写字母 'a''z'

Solution

  • 贪心双指针问题
  • 先构建哈希表,key为字符,value为字符在S中出现的最远位置
  • 遍历S,时刻更新当前最远位置last = max(last, index2reindex[S[i]])
  • i == last,则将计数器的值cnt写入结果,并cnt清零
class Solution:
    def partitionLabels(self, S: str) -> List[int]:
        index2reindex = {s: index for index, s in enumerate(S)}
        
        cnt, res = 0, []
        last = index2reindex[S[0]]
        
        for i in range(len(S)):
            cnt += 1
            last = max(last, index2reindex[S[i]])
            if i == last:
                res.append(cnt)
                cnt = 0
                
        return res