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
相关推荐
2301_8073671919 分钟前
C++中的模板方法模式
开发语言·c++·算法
PhotonixBay44 分钟前
共聚焦显微镜的结构组成与应用
人工智能·算法·机器学习
逆境不可逃1 小时前
LeetCode 热题 100 之 33. 搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 4. 寻找两个正序数组的中位数
java·开发语言·数据结构·算法·leetcode·职场和发展
tankeven1 小时前
HJ137 乘之
c++·算法
add45a1 小时前
C++中的观察者模式
开发语言·c++·算法
进击的小头1 小时前
第13篇:基于伯德图的超前_滞后校正器深度设计
python·算法
leaves falling1 小时前
二分查找:迭代与递归实现全解析
数据结构·算法·leetcode
做怪小疯子2 小时前
Leetcode刷题——深度优先搜索(DFS)
算法·leetcode·深度优先
大数据AI人工智能培训专家培训讲师叶梓2 小时前
120B 数学语料 + GRPO 算法,DeepSeekMath 刷新开源大模型推理天花板
人工智能·算法·大模型·推理·deepseek·openclaw·openclaw 讲师
IMPYLH2 小时前
Linux 的 comm 命令
linux·运维·算法