AC Leetcode 763. 划分字母区间

简介: AC Leetcode 763. 划分字母区间

763. 划分字母区间

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

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

提示:
S的长度在[1, 500]之间。
S只包含小写字母 'a' 到 'z' 。

解题思路

1)解决问题的根本在于,找到一个区间,这个区间内的字符,没有在其他区间出现过
2)那我们就想找到这个区间的开始位置、结束位置,针对这个区间的每个字符,如果字符出现的lastIndex大于当前统计到的stop,则stop更新为此边界,直到遍历到这个stop边界,证明此次遍历,start->stop这个区间内,已经包含所有重复字符

在这里插入图片描述

import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<Integer>();
        if (s == null || s.length() == 0) {
            return res;
        }

        int start = 0, stop = 0;
        for (int i = start; i < s.length(); i++) {
            if (s.lastIndexOf(s.charAt(i)) > stop) {
                stop = s.lastIndexOf(s.charAt(i));
            }

            if (i == stop) {
                res.add(stop - start + 1);
                start = i + 1;
            }
        }

        return res;

    }
}
目录
相关文章
|
6天前
|
算法 测试技术 C#
【单调栈】LeetCode2030:含特定字母的最小子序列
【单调栈】LeetCode2030:含特定字母的最小子序列
|
6天前
leetcode代码记录(第一个出现两次的字母
leetcode代码记录(第一个出现两次的字母
12 2
|
6天前
leetcode代码记录(有效的字母异位词
leetcode代码记录(有效的字母异位词
11 1
|
6天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6天前
【力扣】1832.判断句子是否为全字母句
【力扣】1832.判断句子是否为全字母句
|
6天前
leetcode热题100. 字母异位词分组
leetcode热题100. 字母异位词分组
18 0
|
6天前
|
Java
LeetCode-电话号码的字母组合-Java
电话号码的字母组合-Java
15 0
|
6天前
|
算法
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
30 0
|
6天前
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
32 0
|
6天前
|
算法 测试技术 C#
【单调栈】【区间合并】LeetCode85:最大矩形
【单调栈】【区间合并】LeetCode85:最大矩形