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

力扣 划分字母区间

贪心算法,存状态,合并区间。

题目

同一字母最多出现在一个片段中,因此要找到相同字母的上界跟下界。由于是对字符串进行划分,在一个片段内,从前往后遍历,找到每个字母的最后一个下标即是可能的划分点了,同时这也是这道题贪心中所要维护的状态值。找到所有字母的最大下标后,就可以对字符串的字符再次进行比较,每次更新状态值,如果索引比状态值小,说明当前遍历过的字符还没有找完,当找到时,即可以进行划分了。划分后的区间计数后加入数组,接着移动指针到下一个数开始下一个区间的划分。

时间复杂度: O(n),空间复杂度: O(∣Σ∣),其中 Σ 是字符串中的字符集。 

class Solution {
    public List<Integer> partitionLabels(String S) {
        char[] s = S.toCharArray();
        int n = s.length;
        int[] last = new int[26];
        for (int i = 0; i < n; i++) {
            last[s[i] - 'a'] = i; // 每个字母最后出现的下标
        }

        List<Integer> ans = new ArrayList<>();
        int start = 0, end = 0;
        for (int i = 0; i < n; i++) {
            end = Math.max(end, last[s[i] - 'a']); 
            if (end == i) { 
                ans.add(end - start + 1); 
                start = i + 1; 
            }
        }
        return ans;
    }
}

相关文章:

  • 广州网站建设商家百度提交网站入口网址
  • 广告设计与制作网站google网站增加关键词
  • 百度网址名称是什么西安自动seo
  • 如何给网站流量来源做标记通过在网址后边加问号?如何做网销
  • 网络服务大厅重庆放心seo整站优化
  • 华企在线网站建设最新疫情爆发
  • linux有哪些常用命令?
  • 华为在不同发展时期的战略选择(节选)
  • 达梦数据库系列之安装及Mysql数据迁移
  • Spring 集成 MyBatis 操作指南(详细实例)
  • 数据结构:树的概念
  • React Router 完全指南:从基础到高级实践
  • 数据基础4: 线性代数基础行列式(矩阵)
  • ctfshow——域名TXT记录泄露
  • React状态管理进阶(四):从Redux到原子革命的终极指南
  • 基于django图书信息管理系统的搭建(增删改查)
  • MySQL系列之远程管理(安全)
  • 前端性能优化
  • 【Java】Tomcat日志
  • ERP系统的库存模块业务逻辑及设计
  • 剖析Kafka持久化底层原理
  • 使用 Kubeflow 和 Ray 构建机器学习平台
  • 使用Semantic Kernel:对DeepSeek添加自定义插件
  • 哈工大《计算机组成原理》第一章笔记
  • 网络参考模型(全)、ARP协议
  • 【Java面试】创建线程有哪几种方式