• LeetCode 763.划分字母区间


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

    示例 1:

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

    提示:

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

    class Solution:
        def partitionLabels(self, S: str) -> List[int]:
            max_index = {item: idx for idx, item in enumerate(S)}  # 这样写就是一个键:一个值,然后通过遍历来更新到最大的那个index
            #print(max_index)
            start, end = 0, 0  # 起始边界, 结束边界
            ans = []        
            for idx, i in enumerate(S):
                end = max(end, max_index[i])   # 这里就是用边界和当前遍历到的那个字母的最大index去比较,看看谁大,
                                               # 如果最大index大就扩充边界。
                if idx == end:  # 最后,遍历的位置和边界重合了,那就ok了,从这里截断并记录长度。 就这些,可以再慢慢理解下。
                    ans.append(end - start + 1)
                    start = idx + 1
            
            return ans
    
  • 相关阅读:
    Calendar日历类
    DateFormat类和SimpleDateFormat类
    Date时间类(java.util.Date)
    时间处理相关类
    不可变和可变字符序列使用陷阱
    String类
    搬圆桌问题
    重温经典之排序 java实现
    i++ 和 ++i
    Intellij Idea 使用技巧 updating
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13189089.html
Copyright © 2020-2023  润新知