代码随想录——划分字母区间(Leetcode763)

题目链接

贪心

java 复制代码
class Solution {
    public List<Integer> partitionLabels(String s) {
        int[] count = new int[27];
        Arrays.fill(count,0);
        // 统计元素最后一次出现的位置
        for(int i = 0; i < s.length(); i++){
            count[s.charAt(i) - 'a'] = i;
        }
        List<Integer> res = new ArrayList<Integer>();
        int left = 0;
        int right = 0;
        for(int i = 0; i < s.length(); i++){
            // 找到字符出现的最远边界
            right = Math.max(right, count[s.charAt(i) - 'a']);
            if(i == right){
                // 将符合条件的字符串长度插入res
                res.add(right - left + 1);
                left = i + 1;
            }
        }
        return res;
    }
}
相关推荐
honortech1 分钟前
算法题中的 mid 中点问题
算法
今儿敲了吗2 分钟前
30| 木材加工
数据结构·c++·笔记·学习·算法
独自破碎E7 分钟前
BISHI66 子数列求积
android·java·开发语言
WW_千谷山4_sch8 分钟前
MYOJ_7789:(洛谷P3388)【模板】割点(割顶)(tarjan算法)
c++·算法·深度优先·图论
WZ188104638699 分钟前
LeetCode第131题
算法·leetcode
锅包一切9 分钟前
PART7 队列
c++·学习·算法·leetcode·力扣·刷题·队列
爱学习的小可爱卢13 分钟前
JavaSE基础-Java String不可变性深度解析
java·javase
Maỿbe14 分钟前
动态规划之子数组问题
算法·动态规划
List<String> error_P16 分钟前
经典回溯算法解析
python·算法
君爱学习16 分钟前
Spring Boot JWT Token 认证
java