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

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

相关推荐
大肥羊学校懒羊羊1 小时前
特殊乘法的计算
数据结构·c++·算法
cpp_25012 小时前
P2430 严酷的训练
数据结构·c++·算法·动态规划·洛谷·背包dp
Rabitebla2 小时前
【数据结构】实现通讯录:基于C语言动态顺序表
c语言·开发语言·数据结构·算法
tankeven2 小时前
动态规划专题(06):树形动态规划(未完待续)
c++·算法·动态规划
米粒12 小时前
力扣算法刷题 Day 52
算法·leetcode·职场和发展
今儿敲了吗2 小时前
应用实战2:新闻列表
学习·算法
人道领域2 小时前
【LeetCode刷题日记】225.用队列实现栈--三招实现栈操作(多种思维)
java·开发语言·算法·leetcode·面试
新新学长搞科研3 小时前
【高届数机械工程会议】第十二届机械工程、材料和自动化技术国际学术会议(MMEAT 2026)
运维·人工智能·算法·机器学习·自动化·软件工程·激光
狐璃同学3 小时前
数据结构(2)线性表
数据结构·算法