leetcode-763:划分字母区间

简介: leetcode-763:划分字母区间

题目

题目链接

字符串S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

示例:

输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。

提示:

  • S的长度在[1, 500]之间。
  • S只包含小写字母 ‘a’ 到 ‘z’ 。

解题

本题的题目看起来有些模糊,实际上题目的重点就是2个

  1. 尽可能多的片段
  2. 同一字母最多出现在一个片段

方法一

参考链接

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了

class Solution {
public:
    vector<int> partitionLabels(string s) {
        int hash[26];// i为字符,hash[i]为字符出现的最后位置
        for(int i=0;i<s.size();i++){ // 统计每一个字符最后出现的位置
            hash[s[i]-'a']=i;
        }
        vector<int> res;
        int left=0,right=0;
        for(int i=0;i<s.size();i++){
            right=max(right,hash[s[i]-'a']); // 找到字符出现的最远边界
            if(i==right){
                res.push_back(right-left+1);
                left=i+1;
            }
        }
        return res;
    }
};

java

class Solution {
    List<Integer> res=new LinkedList<>();
    public List<Integer> partitionLabels(String s) {
        int[] mp=new int[26];
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            mp[c-'a']=i;
        }
        int left=0,right=0;
        for(int i=0;i<s.length();i++){
            right=Math.max(right,mp[s.charAt(i)-'a']);
            if(i==right){
                res.add(right-left+1);
                left=i+1;
            }
        }
        return res;
    }
}


相关文章
|
1天前
|
存储 算法 测试技术
力扣经典150题第四十七题:汇总区间
力扣经典150题第四十七题:汇总区间
8 1
|
16天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
19天前
|
存储 算法 安全
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
|
19天前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
19天前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
19天前
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
1天前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
5 0
|
1天前
|
存储 算法 测试技术
力扣经典150题第四十八题:合并区间
力扣经典150题第四十八题:合并区间
4 0
|
1天前
|
存储
力扣经典150题第四十二题:字母异位词分组
力扣经典150题第四十二题:字母异位词分组
5 0
|
1天前
|
存储
力扣经典150题第四十一题:有效的字母异位词
力扣经典150题第四十一题:有效的字母异位词
4 0