当前位置: 首页 > news >正文

LeetCode763. 划分字母区间(2024冬季每日一题 23)

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

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

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

示例 1:

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

示例 2:

输入:s = “eccbbbbdec”
输出:[10]

提示:

1 < = s . l e n g t h < = 500 1 <= s.length <= 500 1<=s.length<=500
s 仅由小写英文字母组成


思路:

  • 初始化遍历字符串中的字符,求出每个字符在字符串中最右的下标
  • 遍历字符串中的字符,确定一个区间,使得区间中的字串,满足区间内每一个字母最只出现在当前区间中
    • 用 l/r 标识当前区间的左/右边界下标,如果当前字符的下标 > r,则将 [l.r] 加入 res 结果中,更新 l 和 r
    • 否则,更新 r 下标
  • 对于 r,如果当前字符在整个字符串中的最右边界 > 当前子区间的 r 边界,则用其更新 r
class Solution {
public:int rmax[30];vector<int> partitionLabels(string s) {int n = s.size();for(int i = 0; i < n; i++){rmax[s[i]-'a'] = max(rmax[s[i]-'a'], i);}vector<int> res;int l = -1, r = -1;for(int i = 0; i < n; i++){if(i > r){if(i) res.push_back(r - l + 1);l = i;}r = max(r, rmax[s[i]-'a']);}res.push_back(r - l + 1);return res;}
};
http://www.lryc.cn/news/496998.html

相关文章:

  • python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime
  • Hadoop生态圈框架部署 伪集群版(四)- Zookeeper单机部署
  • LuaJava
  • Maven下载安装、环境配置(超详细)(包括Java环境配置(Windows)、在IDEA中配置Maven)
  • Python中的实例方法、静态方法和类方法三者区别?
  • 【学习Go编程】
  • Linux系统:网络
  • shodan2-批量查找CVE-2019-0708漏洞
  • 面向对象(二)——类和对象(上)
  • Redis3——线程模型与数据结构
  • linux 获取公网流量 tcpdump + python + C++
  • C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static
  • pytest(二)excel数据驱动
  • python蓝桥杯刷题3
  • 基于PySpark 使用线性回归、随机森林以及模型融合实现天气预测
  • Day 30 贪心算法 part04
  • dns实验3:主从同步-完全区域传输
  • 数据结构 (20)二叉树的遍历与线索化
  • 【docker】Overlay网络
  • 基于智能语音交互的智能呼叫中心工作机制
  • Linux条件变量线程池详解
  • 有趣的Docker
  • 深入探讨锁升级问题
  • MySQL篇—通过官网下载linux系统下多种安装方式的MySQL社区版软件
  • 6.824/6.5840(2024)环境配置wsl2+vscode
  • 【乐企文件生成工程】搭建docker环境,使用docker部署工程
  • 常见的数据结构---队列、树与堆的深入剖析
  • leetcode--螺旋矩阵
  • JavaScript(JS)的对象
  • 基于BM1684的AI边缘服务器-模型转换,大模型一体机