每日一题198—划分字母区间
给你一个字符串 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—划分字母区间相关推荐
- Leetcode题763、划分字母区间(Python题解)
同类问题: 跳跃游戏 跳跃游戏II 视频拼接 问题: 题目来源:力扣(LeetCode) leetcode763.划分字母区间 难度:中等 分析: 贪心 这道题的思路和跳跃游戏II基本一致. 首先我们 ...
- 划分字母区间c语言,LeetCode(#763):划分字母区间
一.前言 本题为LeetCode第763题,是一道 贪心算法 相关的算法题,难度中等. 本题链接:#763. 划分字母区间 二.题目 字符串S由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同 ...
- 划分字母区间(双指针,贪心)
划分字母区间(双指针,贪心) 双指针 贪心 题目描述:字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表. 双指针 ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- Leetcode每日一题:763.partition-labels(划分字母区间)
题意大概是:对于所给字符串S,把它分成几个部分,使得相同的字母只出现在同一个部分: 思路:先扫描一遍字符串,记录下每个字符最后出现的位置:然后利用双指针遍历字符串,设置变量end用于表示分隔开的子字符 ...
- 把数组排成最小的数字,划分字母区间,最小覆盖子串,验证回文字符串II
面试题45:把数组排成最小的数字 输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.这里自定义了一个排序规则. class Solution { publi ...
- LeetCode 763. 划分字母区间
文章目录 解法1:记录最大最小下标 解法2:贪心 https://leetcode-cn.com/problems/partition-labels/ 难度:中等 字符串 S 由小写字母组成.我们 ...
- 763. 划分字母区间009(贪心算法+思路+详解+图示)
一:题目: 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表. 示例: 输入:S = "ababcba ...
- 763. Partition Labels 划分字母区间
字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入:S = "ababcb ...
最新文章
- 心得体悟帖---17、于迷茫低落处找到本心
- Java高并发编程(十一):Java中线程池
- 园区医保和其他地方的医保的区别
- mysql编码丢了_记住:永远不要在 MySQL 中使用 UTF-8
- java基础—Runtime类使用
- 对于C++指针的详细理解
- 蒙哥马利java算法_算法详解 - 蒙哥马利算法的概念与原理
- 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
- Qt之QToolBox
- 用一台笔记本跑ROVIO
- 泡泡代码c语言,重发一次,带注释的泡泡模拟程序!
- java将html代码格式化,java代码格式化为html
- Scipy总结(constants)
- 基于matlab的Hough变换图像直线检测算法仿真
- BruteXSS:XSS暴力破解神器
- ITU标准介绍及下载索引
- 人工智能知识全面讲解:特征工程
- mfc异形窗口的创建
- 基于S12ZVM的无感FOC失步检测
- FPGA实现CortexM3内核