【算法四十一】763. 划分字母区间

763. 划分字母区间

贪心:

java 复制代码
class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> ans = new ArrayList<>();
        int len = s.length();
        char[] chars = s.toCharArray();

        //记录每一个片段开始的下标
        int end = 0;
        int start = 0;
        
        //用一个数组记录每一个字母出现的最晚下标
        int[] last = new int[26];
        for(int i = 0;i<len;i++){
            last[chars[i] - 'a'] = i;
        }

        //遍历字符串,找片段
        for(int j = 0;j<len;j++){
            //记录当前片段的最近下标
            end = Math.max(end,last[chars[j] - 'a']);
            if(j == end){
                ans.add(end-start+1);
                start = end+1;
            }
        }
        return ans;
    }
}

时间复杂度:O(N)

空间复杂度:O(∣Σ∣),其中 Σ 是字符串中的字符集。这道题中,字符串只包含小写字母,因此 ∣Σ∣=26

思路:要求是每个片段要包含片段中出现字符在字符串的最后一个,那循环到每个字符该怎么判断当前字符是不是字符串中的最后一个呢,用数组来保存每个字符对应的最晚下标,如果不是,那就延长片段

相关推荐
liulilittle7 小时前
反量化:反量化Q8零(q8_0)
人工智能·算法·机器学习·ai·llm
青 春 记 忆13 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表
Sagittarius_A*15 小时前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码
QAQo7T17 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
千里之行,始于足下sanhai17 小时前
P8686 [蓝桥杯 2019 省 A] 修改数组 - 数字魔法大冒险 题解
c++·算法·动态规划
小星星闪亮登场17 小时前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个17 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活17 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
2601_9571746519 小时前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备19 小时前
激光对中仪采购要点
数据库·嵌入式硬件·算法