【算法四十一】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

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

相关推荐
To_OC6 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia18 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zephyr0510 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米11 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚12 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结12 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_13 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
Tisfy13 小时前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
泷寂13 小时前
最小生成树 (MST基础)
算法
Daniel_12314 小时前
数组——总结篇
算法