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

leetcode hot 100 -划分字母区间

给你一个字符串 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 List<Integer> partitionLabels(String s) {
            List<Integer> list = new ArrayList<>();
            int[] cnt = new int[26];
            // 存放字母的最远下标
            for (int i = 0; i < s.length(); i++) {
                cnt[s.charAt(i) - 'a'] = i;
            }
            int maxlen = 0; //每一段的长度
            int begin = 0;// 开始
            int last = 0;//结束
            // o(n)
            for (int i = 0; i < s.length(); i++) {
                last = Math.max(last, cnt[s.charAt(i) - 'a']); //每次更新最大边界
                if (i == last) {  //到达边界,开始截断
                    maxlen = last - begin + 1;
                    list.add(maxlen);
                    begin = last + 1;
                }
            }
            return list;
        }
    }


http://www.kler.cn/a/505080.html

相关文章:

  • 为深度学习创建PyTorch张量 - 最佳选项
  • Git的基本命令以及其原理(公司小白学习)
  • 怎么实现Redis的高可用?
  • 【AIGC-ChatGPT进阶提示词指令】智慧母婴:打造基于成长树的儿童发展引导系统
  • 神经网络
  • 【C++第三方库】快速上手---轻量级数据库SQLite和单元测试工具Gtest
  • CDP中的Hive3之Apache Hive3特性
  • TCP-IP详解卷 TCP的超时与重传
  • springboot整合rabbitmq(消息确认)
  • AWS上搭建Storage Gateway并创建SMB和NFS服务
  • 一招解决word嵌入图片显示不全问题
  • 【vue3项目使用 animate动画效果】
  • Linux固定ip
  • 借助Claude实现Playwright的自动化(MCP Server)
  • UE5游戏性能优化指南
  • Java 输入输出流(下)
  • 简洁明快git入门及github实践教程
  • 音视频入门基础:RTP专题(3)——SDP简介
  • arcgis三调符号库的使用
  • 《leetcode-runner》如何手搓一个debug调试器——指令系统
  • 【源码】Sharding-JDBC源码分析之SQL重写实现原理
  • IEC103 转 ModbusTCP 网关
  • 【网络协议】ACL(访问控制列表)第二部分
  • Re78 读论文:GPT-4 Technical Report
  • 中台成熟度模型有什么用
  • 2025特种设备安全管理人员免费题库限时练习(判断题)