LeetCode 763 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 "ababcc" 能够被分为 "abab", "cc",但类似 "aba", "bcc""ab", "ab", "cc" 的划分是非法的。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

示例 1:

输入:s = "ababcbacadefegdehijhklij"

输出:9,7,8

解释:

划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。

每个字母最多出现在一个片段中。

像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。

示例 2:

输入:s = "eccbbbbdec"

输出:10

提示:

1 <= s.length <= 500

s 仅由小写英文字母组成

Python代码:

python 复制代码
class Solution:
    def partitionLabels(self, s: str) -> List[int]:
        # 步骤1:记录每个字符的最后出现位置
        last = {}
        for i, char in enumerate(s):
            last[char] = i
        
        # 步骤2:动态划分片段
        result = []
        start, end = 0, 0
        for i, char in enumerate(s):
            end = max(end, last[char])  # 扩展当前片段边界
            if i == end:  # 找到分割点
                result.append(end - start + 1)
                start = end + 1  # 重置起始位置
        return result
相关推荐
β添砖java1 小时前
机器学习2 KNN算法、距离度量、特征预处理、超参数选择、手写数字、鸢尾花
人工智能·算法·机器学习
TAN-90°-2 小时前
Deep Learning for Computer Vision——Generative Models 2
人工智能·深度学习·神经网络·算法·目标检测·机器学习·计算机视觉
Rabitebla2 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
圣保罗的大教堂2 小时前
leetcode 1401. 圆和矩形是否有重叠 中等
leetcode
qq_410194292 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
Omics Pro2 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
residual_fan2 小时前
航空发动机故障诊断专用智能体(六):实际机队健康管理中的应用考量与展望
人工智能·算法·数据挖掘·数据分析
hansang_IR3 小时前
【讲解】CSP-S2026 第一轮初赛
c++·算法
hanlin033 小时前
刷题笔记:力扣第76题-最小覆盖子串
笔记·算法·leetcode
Zane19943 小时前
比较排序跑不出O(nlogn)是数学上证明过的,计数、桶、基数排序凭什么能绕开这堵墙
算法·排序算法