给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

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

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

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

输入:s = "eccbbbbdec"
输出:[10]

提示:

1 <= s.length <= 500
s 仅由小写英文字母组成

解题思路:

遍历的过程要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点,此前所有出现过的字母,最远也就到这个边界了。

统计每个字符最后出现的位置

从头遍历字符,并更新字符的最远出现下标,如果找到字符最远的出现下标和当前下标相等了,就找到了割点

代码:

class Solution {
public:vector<int> partitionLabels(string s) {int hash[27] = {0}; // i为字符,hash[i]为字符出现的最后位置for (int i = 0; i < s.size(); i++) { // 统计每⼀个字符最后出现的位置hash[s[i] - 'a'] = i;}vector<int> result;int left = 0;int right = 0;for (int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']); // 找到字符出现的最远边界if (i == right) {result.push_back(right - left + 1);left = i + 1;}}return result;}
};

每日一题198—划分字母区间相关推荐

  1. Leetcode题763、划分字母区间(Python题解)

    同类问题: 跳跃游戏 跳跃游戏II 视频拼接 问题: 题目来源:力扣(LeetCode) leetcode763.划分字母区间 难度:中等 分析: 贪心 这道题的思路和跳跃游戏II基本一致. 首先我们 ...

  2. 划分字母区间c语言,LeetCode(#763):划分字母区间

    一.前言 本题为LeetCode第763题,是一道 贪心算法 相关的算法题,难度中等. 本题链接:#763. 划分字母区间 二.题目 字符串S由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同 ...

  3. 划分字母区间(双指针,贪心)

    划分字母区间(双指针,贪心) 双指针 贪心 题目描述:字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表. 双指针 ...

  4. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  5. Leetcode每日一题:763.partition-labels(划分字母区间)

    题意大概是:对于所给字符串S,把它分成几个部分,使得相同的字母只出现在同一个部分: 思路:先扫描一遍字符串,记录下每个字符最后出现的位置:然后利用双指针遍历字符串,设置变量end用于表示分隔开的子字符 ...

  6. 把数组排成最小的数字,划分字母区间,最小覆盖子串,验证回文字符串II

    面试题45:把数组排成最小的数字 输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.这里自定义了一个排序规则. class Solution { publi ...

  7. LeetCode 763. 划分字母区间

    文章目录 解法1:记录最大最小下标 解法2:贪心 https://leetcode-cn.com/problems/partition-labels/ 难度:中等   字符串 S 由小写字母组成.我们 ...

  8. 763. 划分字母区间009(贪心算法+思路+详解+图示)

    一:题目: 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表. 示例: 输入:S = "ababcba ...

  9. 763. Partition Labels 划分字母区间

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

最新文章

  1. 心得体悟帖---17、于迷茫低落处找到本心
  2. Java高并发编程(十一):Java中线程池
  3. 园区医保和其他地方的医保的区别
  4. mysql编码丢了_记住:永远不要在 MySQL 中使用 UTF-8
  5. java基础—Runtime类使用
  6. 对于C++指针的详细理解
  7. 蒙哥马利java算法_算法详解 - 蒙哥马利算法的概念与原理
  8. 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
  9. Qt之QToolBox
  10. 用一台笔记本跑ROVIO
  11. 泡泡代码c语言,重发一次,带注释的泡泡模拟程序!
  12. java将html代码格式化,java代码格式化为html
  13. Scipy总结(constants)
  14. 基于matlab的Hough变换图像直线检测算法仿真
  15. BruteXSS:XSS暴力破解神器
  16. ITU标准介绍及下载索引
  17. 人工智能知识全面讲解:特征工程
  18. mfc异形窗口的创建
  19. 基于S12ZVM的无感FOC失步检测
  20. FPGA实现CortexM3内核

热门文章

  1. Golang基础笔记
  2. matlab曲线拟合工具箱cftool,Matlab曲线拟合工具箱CFtool使用
  3. 使用fastboot命令刷机流程详解
  4. 2020-11-05 css实例:轮播图上的小圆点
  5. 计算DOS:WIEN2k
  6. Reentrant vs Thread-safe
  7. DevOps进阶(十二)GIT、GITLAB、GITHUB、GITLIB
  8. layui实现上传图片鼠标悬浮展示删除及预览图标
  9. Photoshop蒙版原理
  10. vue项目中实现浏览器全屏 - screenfull